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;
}