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();
}