Author: toad
Date: 2007-09-22 15:06:07 +0000 (Sat, 22 Sep 2007)
New Revision: 15264
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
Log:
avoid nested locks in one case, document the other
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-22 15:02:54 UTC
(rev 15263)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-22 15:06:07 UTC
(rev 15264)
@@ -250,17 +250,20 @@
peersLRU.pushLeast(nodeToAddNow);
else
peersLRU.push(nodeToAddNow);
- // Always take OpennetManager lock
before PeerManager
- node.peers.addPeer(nodeToAddNow, true);
oldPeers.remove(nodeToAddNow);
} else {
if(logMINOR) Logger.minor(this, "Want
peer because not enough opennet nodes");
}
timeLastOffered = System.currentTimeMillis();
- return true;
+ ret = true;
}
noDisconnect = successCount <
MIN_SUCCESS_BETWEEN_DROP_CONNS;
}
+ if(ret) {
+ if(nodeToAddNow != null)
+ node.peers.addPeer(nodeToAddNow, true); // Add
to peers outside the OM lock
+ return true;
+ }
Vector dropList = new Vector();
synchronized(this) {
boolean hasDisconnected = false;
@@ -288,6 +291,7 @@
if(ret) {
long now = System.currentTimeMillis();
if(nodeToAddNow != null) {
+ // Here we can't avoid nested locks. So
always take the OpennetManager lock first.
if(!node.peers.addPeer(nodeToAddNow)) {
// Can't add it, already
present (some sort of race condition)
PeerNode readd = (PeerNode)
dropList.remove(dropList.size()-1);