[freenet-cvs] r18361 - trunk/freenet/src/freenet/node

toad at freenetproject.org toad at freenetproject.org
Tue Mar 4 18:03:01 UTC 2008


Author: toad
Date: 2008-03-04 18:03:01 +0000 (Tue, 04 Mar 2008)
New Revision: 18361

Modified:
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Fix deadlock

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java	2008-03-04 17:48:19 UTC (rev 18360)
+++ trunk/freenet/src/freenet/node/PeerNode.java	2008-03-04 18:03:01 UTC (rev 18361)
@@ -1122,6 +1122,7 @@
 		node.failureTable.onDisconnect(this);
 		node.peers.disconnected(this);
 		boolean ret;
+		KeyTracker cur, prev, unv;
 		synchronized(this) {
 			ret = isConnected;
 			// Force renegotiation.
@@ -1129,12 +1130,9 @@
 			isRoutable = false;
 			isRekeying = false;
 			// Prevent sending packets to the node until that happens.
-			if(currentTracker != null)
-				currentTracker.disconnected();
-			if(previousTracker != null)
-				previousTracker.disconnected();
-			if(unverifiedTracker != null)
-				unverifiedTracker.disconnected();
+			cur = currentTracker;
+			prev = previousTracker;
+			unv = unverifiedTracker;
 			if(dumpTrackers) {
 				currentTracker = null;
 				previousTracker = null;
@@ -1152,6 +1150,9 @@
 				}
 			}
 		}
+		if(cur != null) cur.disconnected();
+		if(prev != null) prev.disconnected();
+		if(unv != null) unv.disconnected();
 		node.lm.lostOrRestartedNode(this);
 		setPeerNodeStatus(now);
 		if(!dumpMessageQueue) {




More information about the cvs mailing list