Author: toad
Date: 2008-01-22 22:43:07 +0000 (Tue, 22 Jan 2008)
New Revision: 17199
Modified:
trunk/freenet/src/freenet/node/RequestHandler.java
Log:
Don't leak (fail to unregister) if we lose the connection, get a fatal error
etc when sending a terminal message.
Modified: trunk/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestHandler.java 2008-01-22 22:38:44 UTC
(rev 17198)
+++ trunk/freenet/src/freenet/node/RequestHandler.java 2008-01-22 22:43:07 UTC
(rev 17199)
@@ -390,23 +390,36 @@
*/
private class TerminalMessageByteCountCollector implements
AsyncMessageCallback {
+ private boolean completed = false;
+
public void acknowledged() {
//terminalMessage ack'd by remote peer
+ complete();
}
public void disconnected() {
Logger.minor(this, "Peer disconnected before terminal message sent
for "+RequestHandler.this);
+ complete();
}
public void fatalError() {
Logger.error(this, "Error sending terminal message?!
for " + RequestHandler.this);
+ complete();
}
public void sent() {
+ complete();
+ }
+
+ private void complete() {
+ synchronized(this) {
+ if(completed) return;
+ completed = true;
+ }
//For byte counting, this relies on the fact that the callback
will only be excuted once.
applyByteCounts();
unregisterRequestHandlerWithNode();
- }
+ }
}
/**