[freenet-cvs] r18330 - in trunk/freenet/src/freenet: io/xfer node

toad at freenetproject.org toad at freenetproject.org
Tue Mar 4 13:49:34 UTC 2008


Author: toad
Date: 2008-03-04 13:49:33 +0000 (Tue, 04 Mar 2008)
New Revision: 18330

Modified:
   trunk/freenet/src/freenet/io/xfer/PacketThrottle.java
   trunk/freenet/src/freenet/node/KeyTracker.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Notify PacketThrottle when we disconnect, when we may have disconnected, when we change address.
So if we have in fact disconnected, it can kill any pending packets.

Modified: trunk/freenet/src/freenet/io/xfer/PacketThrottle.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/PacketThrottle.java	2008-03-04 13:41:56 UTC (rev 18329)
+++ trunk/freenet/src/freenet/io/xfer/PacketThrottle.java	2008-03-04 13:49:33 UTC (rev 18330)
@@ -254,4 +254,8 @@
 		}
 		
 	}
+
+	public synchronized void maybeDisconnected() {
+		notifyAll();
+	}
 }

Modified: trunk/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- trunk/freenet/src/freenet/node/KeyTracker.java	2008-03-04 13:41:56 UTC (rev 18329)
+++ trunk/freenet/src/freenet/node/KeyTracker.java	2008-03-04 13:49:33 UTC (rev 18330)
@@ -600,9 +600,20 @@
     		Logger.minor(this, "Executed "+cbCount+" callbacks");
     }
     
+    private PacketThrottle _lastThrottle;
+    
     PacketThrottle getThrottle() {
     	// pn.getPeer() cannot be null as it has already connected.
-    	return PacketThrottle.getThrottle(pn.getPeer(), Node.PACKET_SIZE);
+    	PacketThrottle newThrottle = PacketThrottle.getThrottle(pn.getPeer(), Node.PACKET_SIZE);
+    	PacketThrottle prevThrottle = null;
+    	synchronized(this) {
+    		if(newThrottle != _lastThrottle) {
+    			prevThrottle = _lastThrottle;
+    			_lastThrottle = newThrottle;
+    		} else return newThrottle;
+    	}
+    	prevThrottle.maybeDisconnected();
+    	return newThrottle;
 	}
 
 	/**
@@ -1000,6 +1011,8 @@
      * *** Must only be called if the KeyTracker is not to be kept. Otherwise, we may receive some packets twice. ***
      */
     public void completelyDeprecated(KeyTracker newTracker) {
+    	if(_lastThrottle != null)
+    		_lastThrottle.maybeDisconnected();
     	if(logMINOR) Logger.minor(this, "Completely deprecated: "+this+" in favour of "+newTracker);
     	LimitedRangeIntByteArrayMapElement[] elements = clear();
     	if(elements.length == 0) return; // nothing more to do
@@ -1022,6 +1035,8 @@
      * Dump all sent messages.
      */
     public void disconnected() {
+    	if(_lastThrottle != null)
+    		_lastThrottle.maybeDisconnected();
         // Clear everything, call the callbacks
     	LimitedRangeIntByteArrayMapElement[] elements = clear();
         for(int i=0;i<elements.length;i++) {

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java	2008-03-04 13:41:56 UTC (rev 18329)
+++ trunk/freenet/src/freenet/node/PeerNode.java	2008-03-04 13:49:33 UTC (rev 18330)
@@ -1611,6 +1611,7 @@
 			} else
 				return;
 		}
+		getThrottle().maybeDisconnected();
 		sendIPAddressMessage();
 	}
 




More information about the cvs mailing list