diff --git a/src/java/com/threerings/presents/peer/server/PeerManager.java b/src/java/com/threerings/presents/peer/server/PeerManager.java index bda69c99a..1c2ea1887 100644 --- a/src/java/com/threerings/presents/peer/server/PeerManager.java +++ b/src/java/com/threerings/presents/peer/server/PeerManager.java @@ -25,6 +25,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.io.ByteArrayInputStream; @@ -504,7 +505,7 @@ public abstract class PeerManager final Map results = Maps.newHashMap(); final Map failures = Maps.newHashMap(); - final Set completedNodes = Sets.newHashSet(); + final AtomicInteger completedNodes = new AtomicInteger(); for (final String node : nodes) { invokeNodeRequest(node, requestBytes, new InvocationService.ResultListener() { public void requestProcessed (Object result) { @@ -519,8 +520,7 @@ public abstract class PeerManager nodeDone(node); } protected void nodeDone (String node) { - completedNodes.add(node); - if (nodes.size() == completedNodes.size()) { + if (completedNodes.incrementAndGet() == nodes.size()) { // if all nodes have responded, let caller know listener.requestsProcessed(new NodeRequestsResultImpl(results, failures)); }