Author: toad
Date: 2008-03-22 17:29:50 +0000 (Sat, 22 Mar 2008)
New Revision: 18723
Modified:
trunk/freenet/src/freenet/node/MessageItem.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Call disconnected() callbacks for pending messages when we have to dump them.
Modified: trunk/freenet/src/freenet/node/MessageItem.java
===================================================================
--- trunk/freenet/src/freenet/node/MessageItem.java 2008-03-22 16:54:13 UTC
(rev 18722)
+++ trunk/freenet/src/freenet/node/MessageItem.java 2008-03-22 17:29:50 UTC
(rev 18723)
@@ -90,4 +90,16 @@
public String toString() {
return
super.toString()+":formatted="+formatted+",msg="+msg+",alreadyReported="+alreadyReportedBytes;
}
+
+ public void onDisconnect() {
+ if(cb != null) {
+ for(int i=0;i<cb.length;i++) {
+ try {
+ cb[i].disconnected();
+ } catch (Throwable t) {
+ Logger.error(this, "Caught "+t+"
calling sent() on "+cb[i]+" for "+this, t);
+ }
+ }
+ }
+ }
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-03-22 16:54:13 UTC
(rev 18722)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-03-22 17:29:50 UTC
(rev 18723)
@@ -1801,6 +1801,7 @@
KeyTracker oldPrev = null;
KeyTracker oldCur = null;
KeyTracker prev = null;
+ MessageItem[] messagesTellDisconnected = null;
synchronized(this) {
handshakeCount = 0;
bogusNoderef = false;
@@ -1828,6 +1829,7 @@
// Generally they would be incomprehensible,
anything that isn't should be sent as
// connection initial messages by
maybeOnConnect().
synchronized(messagesToSendNow) {
+ messagesTellDisconnected =
(MessageItem[]) messagesToSendNow.toArray(new
MessageItem[messagesToSendNow.size()]);
messagesToSendNow.clear();
}
} // else it's a rekey
@@ -1864,6 +1866,11 @@
Arrays.equals(previousTracker.sessionKey, unverifiedTracker.sessionKey))
Logger.error(this, "previousTracker key equals
unverifiedTracker key: prev "+previousTracker+" unv "+unverifiedTracker);
}
+ if(messagesTellDisconnected != null) {
+ for(int i=0;i<messagesTellDisconnected.length;i++) {
+ messagesTellDisconnected[i].onDisconnect();
+ }
+ }
if(bootIDChanged) {
node.lm.lostOrRestartedNode(this);