1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-06-25 22:53:22 +00:00

Make monitors use a concurrent map instead of a synchronized

We didn't lock when iterating on the main-thread, so it wasn't actually
thread-safe anyway!
This commit is contained in:
SquidDev 2019-01-25 22:59:01 +00:00
parent 3aa3852ff6
commit e1e5e898ab
2 changed files with 14 additions and 39 deletions

View File

@ -28,8 +28,6 @@ public MonitorPeripheral( TileMonitor monitor )
m_monitor = monitor;
}
// IPeripheral implementation
@Nonnull
@Override
public String getType()

View File

@ -27,13 +27,12 @@
import net.minecraft.world.World;
import javax.annotation.Nonnull;
import java.util.HashSet;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class TileMonitor extends TileGeneric implements ITilePeripheral, IPeripheralTile
{
// Statics
public static final double RENDER_BORDER = (2.0 / 16.0);
public static final double RENDER_MARGIN = (0.5 / 16.0);
public static final double RENDER_PIXEL_SCALE = (1.0 / 64.0);
@ -41,39 +40,23 @@ public class TileMonitor extends TileGeneric implements ITilePeripheral, IPeriph
private static final int MAX_WIDTH = 8;
private static final int MAX_HEIGHT = 6;
// Members
private ServerMonitor m_serverMonitor;
private ClientMonitor m_clientMonitor;
private MonitorPeripheral m_peripheral;
private final Set<IComputerAccess> m_computers;
private final Set<IComputerAccess> m_computers = Collections.newSetFromMap( new ConcurrentHashMap<>() );
private boolean m_destroyed;
private boolean m_ignoreMe;
private boolean m_destroyed = false;
private boolean m_ignoreMe = false;
private int m_width;
private int m_height;
private int m_xIndex;
private int m_yIndex;
private int m_width = 1;
private int m_height = 1;
private int m_xIndex = 0;
private int m_yIndex = 0;
private int m_dir;
private int m_dir = 2;
private boolean m_advanced;
public TileMonitor()
{
m_computers = new HashSet<>();
m_destroyed = false;
m_ignoreMe = false;
m_width = 1;
m_height = 1;
m_xIndex = 0;
m_yIndex = 0;
m_dir = 2;
}
@Override
public void onLoad()
{
@ -694,20 +677,14 @@ public void monitorTouched( float xPos, float yPos, float zPos )
}
}
public void addComputer( IComputerAccess computer )
void addComputer( IComputerAccess computer )
{
synchronized( this )
{
m_computers.add( computer );
}
m_computers.add( computer );
}
public void removeComputer( IComputerAccess computer )
void removeComputer( IComputerAccess computer )
{
synchronized( this )
{
m_computers.remove( computer );
}
m_computers.remove( computer );
}
@Nonnull