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 {