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


Reply via email to