Author: robert
Date: 2007-12-19 22:01:58 +0000 (Wed, 19 Dec 2007)
New Revision: 16738

Modified:
   trunk/freenet/src/freenet/node/CHKInsertSender.java
Log:
fix NPE; that's how async timeouts work!


Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/CHKInsertSender.java 2007-12-19 21:29:36 UTC 
(rev 16737)
+++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2007-12-19 22:01:58 UTC 
(rev 16738)
@@ -106,6 +106,11 @@
                }

                public void onMatched(Message m) {
+                       if (m==null) {
+                               Logger.error(this, "Timed out waiting for a 
final ack from: "+pn);
+                               receivedNotice(false);
+                               return;
+                       }
                        PeerNode pn = (PeerNode) m.getSource();
                        // pn cannot be null, because the filters will prevent 
garbage collection of the nodes

@@ -128,16 +133,6 @@
                private MessageFilter getNotificationMessageFilter() {
                        return MessageFilter.create().setField(DMT.UID, 
uid).setType(DMT.FNPInsertTransfersCompleted).setSource(pn).setTimeout(TRANSFER_COMPLETION_ACK_TIMEOUT);
                }
-               
-               boolean isTimedOut() {
-                       return 
System.currentTimeMillis()>(transferCompletedTime+TRANSFER_COMPLETION_ACK_TIMEOUT);
-               }
-               
-               public void maybeTimedOut() {
-                       if (isTimedOut()) {
-                               receivedNotice(false);
-                       }
-               }
        }

        CHKInsertSender(NodeCHK myKey, long uid, byte[] headers, short htl, 
@@ -721,7 +716,6 @@
                                                completedTransfers = false;
                                                break;
                                        }
-                                       transfers[i].maybeTimedOut();
                                        if 
(!transfers[i].receivedCompletionNotice) {
                                                //must wait
                                                completedNotifications = false;


Reply via email to