Author: toad
Date: 2007-09-25 16:02:37 +0000 (Tue, 25 Sep 2007)
New Revision: 15297

Modified:
   trunk/freenet/src/freenet/node/OpennetManager.java
Log:
Don't add node if it's already in the LRU.
Don't care if it's already in the global peers list otoh: doesn't necessarily 
mean it's in the LRU at this point (we may have reconnected to an 
old-opennet-peer, in which case we add it to global *first*).

Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2007-09-25 15:45:17 UTC 
(rev 15296)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2007-09-25 16:02:37 UTC 
(rev 15297)
@@ -242,6 +242,12 @@
                boolean ret = true;
                boolean noDisconnect;
                synchronized(this) {
+                       if(nodeToAddNow != null &&
+                                       peersLRU.contains(nodeToAddNow)) {
+                               if(logMINOR)
+                                       Logger.minor(this, "Opennet peer 
already present in LRU: "+nodeToAddNow);
+                               return true;
+                       }
                        if(peersLRU.size() < MAX_PEERS) {
                                if(nodeToAddNow != null) {
                                        if(logMINOR) Logger.minor(this, "Added 
opennet peer "+nodeToAddNow+" as opennet peers list not full");
@@ -281,7 +287,7 @@
                                        break;
                                }
                                if(logMINOR)
-                                       Logger.minor(this, "Drop opennet peer: 
"+toDrop+" (connected="+toDrop.isConnected()+")");
+                                       Logger.minor(this, "Drop opennet peer: 
"+toDrop+" (connected="+toDrop.isConnected()+") of "+peersLRU.size());
                                if(!toDrop.isConnected())
                                        hasDisconnected = true;
                                peersLRU.remove(toDrop);
@@ -292,12 +298,10 @@
                                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);
-                                               peersLRU.pushLeast(readd);
-                                               ret = false;
-                                               if(logMINOR) Logger.minor(this, 
"Could not add opennet peer "+nodeToAddNow+" because already in list");
-                                       } else {
+                                               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.
+                                       }
                                                successCount = 0;
                                                if(addAtLRU)
                                                        
peersLRU.pushLeast(nodeToAddNow);
@@ -307,7 +311,6 @@
                                                oldPeers.remove(nodeToAddNow);
                                                // Always take OpennetManager 
lock before PeerManager
                                                
node.peers.addPeer(nodeToAddNow, true);
-                                       }
                                        if(!dropList.isEmpty())
                                                timeLastDropped = now;
                                } else {


Reply via email to