Don't modify the set we're iterating over.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6152 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Par Winzell
2010-09-11 17:02:48 +00:00
parent d5dcc4a1eb
commit 2180623f37
@@ -503,6 +503,7 @@ public abstract class PeerManager
final Map<String, T> results = Maps.newHashMap(); final Map<String, T> results = Maps.newHashMap();
final Map<String, String> failures = Maps.newHashMap(); final Map<String, String> failures = Maps.newHashMap();
final Set<String> completedNodes = Sets.newHashSet();
for (final String node : nodes) { for (final String node : nodes) {
invokeNodeRequest(node, requestBytes, new InvocationService.ResultListener() { invokeNodeRequest(node, requestBytes, new InvocationService.ResultListener() {
public void requestProcessed (Object result) { public void requestProcessed (Object result) {
@@ -517,8 +518,8 @@ public abstract class PeerManager
nodeDone(node); nodeDone(node);
} }
protected void nodeDone (String node) { protected void nodeDone (String node) {
nodes.remove(node); completedNodes.add(node);
if (nodes.isEmpty()) { if (nodes.size() == completedNodes.size())
// if all nodes have responded, let caller know // if all nodes have responded, let caller know
listener.requestsProcessed(new NodeRequestsResultImpl<T>(results, failures)); listener.requestsProcessed(new NodeRequestsResultImpl<T>(results, failures));
} }