Author: toad
Date: 2007-03-24 19:49:32 +0000 (Sat, 24 Mar 2007)
New Revision: 12331

Modified:
   trunk/freenet/src/freenet/node/PeerManager.java
Log:
Synchronization error (race condition could cause e.g. ArrayIndexOutOfBounds, 
incorrect output etc)

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-03-24 19:47:41 UTC 
(rev 12330)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-03-24 19:49:32 UTC 
(rev 12331)
@@ -1008,10 +1008,14 @@
        }

        public PeerNodeStatus[] getPeerNodeStatuses() {
-               PeerNodeStatus[] peerNodeStatuses = new 
PeerNodeStatus[myPeers.length];
-               for (int peerIndex = 0, peerCount = myPeers.length; peerIndex < 
peerCount; peerIndex++) {
-                       peerNodeStatuses[peerIndex] = 
myPeers[peerIndex].getStatus();
+        PeerNode[] peers;
+        synchronized (this) {
+                       peers = myPeers;
                }
+               PeerNodeStatus[] peerNodeStatuses = new 
PeerNodeStatus[peers.length];
+               for (int peerIndex = 0, peerCount = peers.length; peerIndex < 
peerCount; peerIndex++) {
+                       peerNodeStatuses[peerIndex] = 
peers[peerIndex].getStatus();
+               }
                return peerNodeStatuses;
        }



Reply via email to