diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java index 45be424a3..7b1cf5dfa 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/ModemPeripheral.java @@ -4,6 +4,7 @@ package dan200.computercraft.shared.peripheral.modem; +import com.google.errorprone.annotations.concurrent.GuardedBy; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaFunction; import dan200.computercraft.api.network.Packet; @@ -85,7 +86,7 @@ import java.util.Set; */ public abstract class ModemPeripheral implements IPeripheral, PacketSender, PacketReceiver { private @Nullable PacketNetwork network; - private final Set computers = new HashSet<>(1); + private final @GuardedBy("computers") Set computers = new HashSet<>(1); private final ModemState state; protected ModemPeripheral(ModemState state) { diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorBlockEntity.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorBlockEntity.java index be2feee1e..3f89c17cd 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorBlockEntity.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/monitor/MonitorBlockEntity.java @@ -25,8 +25,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Nullable; -import java.util.HashSet; +import java.util.Collections; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; public class MonitorBlockEntity extends BlockEntity { @@ -46,7 +47,7 @@ public class MonitorBlockEntity extends BlockEntity { private @Nullable ServerMonitor serverMonitor; private @Nullable ClientMonitor clientMonitor; private @Nullable MonitorPeripheral peripheral; - private final Set computers = new HashSet<>(); + private final Set computers = Collections.newSetFromMap(new ConcurrentHashMap<>()); private boolean needsUpdate = false; private boolean needsValidating = false; diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index c68e4ad71..4a6ab7ef0 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -4,6 +4,7 @@ package dan200.computercraft.shared.peripheral.speaker; +import com.google.errorprone.annotations.concurrent.GuardedBy; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaFunction; @@ -57,7 +58,7 @@ public abstract class SpeakerPeripheral implements IPeripheral { public static final int SAMPLE_RATE = 48000; private final UUID source = UUID.randomUUID(); - private final Set computers = new HashSet<>(); + private final @GuardedBy("computers") Set computers = new HashSet<>(); private long clock = 0; private long lastPositionTime;