Author: toad
Date: 2008-12-06 15:47:00 +0000 (Sat, 06 Dec 2008)
New Revision: 24095

Modified:
   trunk/freenet/src/freenet/node/OpennetManager.java
   trunk/freenet/src/freenet/node/OpennetPeerNode.java
Log:
Don't add to the old-opennet-peers list unless the node was droppable (ignoring 
connection issues), and wasn't dropped.


Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2008-12-06 15:24:00 UTC 
(rev 24094)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2008-12-06 15:47:00 UTC 
(rev 24095)
@@ -424,11 +424,12 @@
                        for(int i=0;i<peers.length;i++) {
                                OpennetPeerNode pn = peers[i];
                                if(pn == null) continue;
-                               if(!pn.isDroppable()) continue;
+                               if(!pn.isDroppable(false)) continue;
                                // LOCKING: Always take the OpennetManager lock 
first
                                if(!pn.isConnected()) {
                                        if(Logger.shouldLog(Logger.MINOR, this))
                                                Logger.minor(this, "Possibly 
dropping opennet peer "+pn+" as is disconnected");
+                                       pn.setWasDropped();
                                        return pn;
                                }
                        }
@@ -438,10 +439,11 @@
                        for(int i=0;i<peers.length;i++) {
                                OpennetPeerNode pn = peers[i];
                                if(pn == null) continue;
-                               if(!pn.isDroppable()) continue;
+                               if(!pn.isDroppable(false)) continue;
                                if(Logger.shouldLog(Logger.MINOR, this))
                                        Logger.minor(this, "Possibly dropping 
opennet peer "+pn+" "+
                                                        
(System.currentTimeMillis() - timeLastDropped)+" ms since last dropped peer");
+                               pn.setWasDropped();
                                return pn;
                        }
                }
@@ -467,9 +469,11 @@
        public void onRemove(OpennetPeerNode pn) {
                synchronized (this) {
                        peersLRU.remove(pn);
-                       oldPeers.push(pn);
-                       while (oldPeers.size() > MAX_OLD_PEERS)
-                               oldPeers.pop();
+                       if(pn.isDroppable(true) && !pn.grabWasDropped()) {
+                               oldPeers.push(pn);
+                               while (oldPeers.size() > MAX_OLD_PEERS)
+                                       oldPeers.pop();
+                       }
                }
        }
 

Modified: trunk/freenet/src/freenet/node/OpennetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetPeerNode.java 2008-12-06 15:24:00 UTC 
(rev 24094)
+++ trunk/freenet/src/freenet/node/OpennetPeerNode.java 2008-12-06 15:47:00 UTC 
(rev 24095)
@@ -35,13 +35,14 @@
                return true;
        }
        
-       public boolean isDroppable() {
+       public boolean isDroppable(boolean ignoreDisconnect) {
                long now = System.currentTimeMillis();
                if(now - getPeerAddedTime() < OpennetManager.DROP_MIN_AGE)
                        return false; // New node
                if(now - node.usm.getStartedTime() < 
OpennetManager.DROP_STARTUP_DELAY)
                        return false; // Give them time to connect after we 
startup
                int status = getPeerNodeStatus();
+               if(!ignoreDisconnect) {
                synchronized(this) {
                        if((status == 
PeerManager.PEER_NODE_STATUS_DISCONNECTED) && (!super.neverConnected()) && 
                                        now - timeLastDisconnect < 
OpennetManager.DROP_DISCONNECT_DELAY &&
@@ -50,6 +51,7 @@
                                return false;
                        }
                }
+               }
                return true;
        }
        
@@ -119,4 +121,20 @@
                
opennet.crypto.socket.getAddressTracker().setPresumedGuiltyAt(System.currentTimeMillis()+60*60*1000);
        }
        
+       private boolean wasDropped;
+
+       synchronized void setWasDropped() {
+               wasDropped = true;
+       }
+       
+       synchronized boolean wasDropped() {
+               return wasDropped;
+       }
+       
+       synchronized boolean grabWasDropped() {
+               boolean ret = wasDropped;
+               wasDropped = false;
+               return ret;
+       }
+       
 }

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to