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) {