Author: toad
Date: 2007-12-03 21:19:11 +0000 (Mon, 03 Dec 2007)
New Revision: 16241
Modified:
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Dump the message queue 1 hour after disconnection if not connected once during
this time.
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-12-03 21:15:32 UTC
(rev 16240)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-12-03 21:19:11 UTC
(rev 16241)
@@ -261,6 +261,9 @@
/** If the clock delta is more than this constant, we don't talk to the
node. Reason: It may not be up to date,
* it will have difficulty resolving date-based content etc. */
private static final long MAX_CLOCK_DELTA = 24L * 60L * 60L * 1000L;
+ /** 1 hour after the node is disconnected, if it is still disconnected
and hasn't connected in that time,
+ * clear the message queue */
+ private static final long CLEAR_MESSAGE_QUEUE_AFTER = 60 * 60 * 1000L;
/** A WeakReference to this object. Can be taken whenever a node object
needs to refer to this object for a
* long time, but without preventing it from being GC'ed. */
final WeakReference myRef;
@@ -966,7 +969,7 @@
* @return True if the node was connected, false if it was not.
*/
public boolean disconnected(boolean dumpMessageQueue, boolean
dumpTrackers) {
- long now = System.currentTimeMillis();
+ final long now = System.currentTimeMillis();
Logger.normal(this, "Disconnected " + this);
node.usm.onDisconnect(this);
node.peers.disconnected(this);
@@ -1001,8 +1004,20 @@
}
node.lm.lostOrRestartedNode(this);
setPeerNodeStatus(now);
+ if(!dumpMessageQueue) {
+ node.getTicker().queueTimedJob(new Runnable() {
+ public void run() {
+ if(!PeerNode.this.isConnected() &&
+ timeLastDisconnect ==
now)
+ synchronized(PeerNode.this) {
+
PeerNode.this.messagesToSendNow.clear();
+ }
+ }
+ }, CLEAR_MESSAGE_QUEUE_AFTER);
+ }
return ret;
}
+
private boolean forceDisconnectCalled = false;
public void forceDisconnect(boolean purge) {