Author: toad
Date: 2007-09-26 09:55:30 +0000 (Wed, 26 Sep 2007)
New Revision: 15312

Modified:
   trunk/freenet/src/freenet/node/OpennetManager.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
reactivate nodes in DISCONNECTING when re-adding them (possibly from 
old-opennet-peers).
also always use addPeer(,true..) in wantPeer to avoid possible infinite looping

Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2007-09-26 09:48:42 UTC 
(rev 15311)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2007-09-26 09:55:30 UTC 
(rev 15312)
@@ -266,7 +266,7 @@
                }
                if(notMany) {
                        if(nodeToAddNow != null)
-                               node.peers.addPeer(nodeToAddNow, true); // Add 
to peers outside the OM lock
+                               node.peers.addPeer(nodeToAddNow, true, true); 
// Add to peers outside the OM lock
                        return true;
                }
                boolean canAdd = true;
@@ -321,7 +321,7 @@
                                }
                        }
                }
-               if(nodeToAddNow != null && !node.peers.addPeer(nodeToAddNow)) {
+               if(nodeToAddNow != null && !node.peers.addPeer(nodeToAddNow, 
true, true)) {
                        if(logMINOR)
                                Logger.minor(this, "Already in global peers 
list: "+nodeToAddNow+" when adding opennet node");
                        // Just because it's in the global peers list doesn't 
mean its in the LRU, it may be an old-opennet-peers reconnection.

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-09-26 09:48:42 UTC 
(rev 15311)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-09-26 09:55:30 UTC 
(rev 15312)
@@ -204,7 +204,7 @@
                 if(oldOpennetPeers)
                        opennet.addOldOpennetNode(pn);
                 else
-                       addPeer(pn, true);
+                       addPeer(pn, true, false);
                 gotSome = true;
             }
         } catch (EOFException e) {
@@ -221,7 +221,7 @@
        }

        public boolean addPeer(PeerNode pn) {
-               return addPeer(pn, false);
+               return addPeer(pn, false, false);
        }

        /**
@@ -229,11 +229,13 @@
         * @param pn The node to add to the routing table.
         * @param ignoreOpennet If true, don't check for opennet peers. If 
false, check for opennet peers and if so,
         * if opennet is enabled auto-add them to the opennet LRU, otherwise 
fail.
+        * @param reactivate If true, re-enable the peer if it is in state 
DISCONNECTING before re-adding it.
         * @return True if the node was successfully added. False if it was 
already present, or if we tried to add
         * an opennet peer when opennet was disabled.
         */
-       boolean addPeer(PeerNode pn, boolean ignoreOpennet) {
+       boolean addPeer(PeerNode pn, boolean ignoreOpennet, boolean reactivate) 
{
                assert(pn != null);
+               pn.forceCancelDisconnecting();
                synchronized (this) {
                        for (int i = 0; i < myPeers.length; i++) {
                                if (myPeers[i].equals(pn)) {

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-09-26 09:48:42 UTC 
(rev 15311)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-09-26 09:55:30 UTC 
(rev 15312)
@@ -2737,4 +2737,13 @@
                }
                setPeerNodeStatus(System.currentTimeMillis());
        }
+
+       /** Called to cancel a delayed disconnect. Always succeeds even if the 
node was not being 
+        * disconnected. */
+       public void forceCancelDisconnecting() {
+               synchronized(this) {
+                       disconnecting = false;
+               }
+               setPeerNodeStatus(System.currentTimeMillis());
+       }
 }


Reply via email to