diff --git a/src/main/java/com/threerings/presents/peer/server/PeerManager.java b/src/main/java/com/threerings/presents/peer/server/PeerManager.java index 10ac224f6..6d2ed6b96 100644 --- a/src/main/java/com/threerings/presents/peer/server/PeerManager.java +++ b/src/main/java/com/threerings/presents/peer/server/PeerManager.java @@ -1078,10 +1078,16 @@ public abstract class PeerManager @Override public void handleSuccess () { // refresh peers with loaded records - for (NodeRecord record : _nodes.values()) { + long now = System.currentTimeMillis(); + for (Iterator it = _nodes.values().iterator(); it.hasNext(); ) { + NodeRecord record = it.next(); if (record.nodeName.equals(_nodeName)) { continue; } + if ((now - record.lastUpdated.getTime()) > PeerNode.STALE_INTERVAL) { + it.remove(); + continue; + } try { refreshPeer(record); } catch (Exception e) { @@ -1090,11 +1096,9 @@ public abstract class PeerManager } // remove peers for which we no longer have up-to-date records - long now = System.currentTimeMillis(); for (Iterator it = _peers.values().iterator(); it.hasNext(); ) { PeerNode peer = it.next(); - NodeRecord record = _nodes.get(peer.getNodeName()); - if (record == null || (now - record.lastUpdated.getTime()) > PeerNode.STALE_INTERVAL) { + if (!_nodes.containsKey(peer.getNodeName())) { peer.shutdown(); it.remove(); }