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


Reply via email to