Author: toad
Date: 2005-12-07 02:57:13 +0000 (Wed, 07 Dec 2005)
New Revision: 7683

Modified:
   trunk/freenet/src/freenet/node/InsertSender.java
   trunk/freenet/src/freenet/node/Version.java
Log:
282: (mandatory)
Fix infinite loop in completion thread.
Also check for disconnected nodes, these don't equal timeouts.

Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java    2005-12-06 16:20:58 UTC 
(rev 7682)
+++ trunk/freenet/src/freenet/node/InsertSender.java    2005-12-07 02:57:13 UTC 
(rev 7683)
@@ -626,6 +626,7 @@
                                        if(nodesWaitingForCompletion.size() != 
waiters.length) {
                                                // Added another one
                                                Logger.minor(this, "Looping 
(mf==null): waiters="+waiters.length+" but 
waiting="+nodesWaitingForCompletion.size());
+                                               continue;
                                        }
                                        if(waitForCompletedTransfers(waiters, 
timeout, noTimeLeft)) {
                                                synchronized(InsertSender.this) 
{
@@ -634,8 +635,9 @@
                                                }
                                                return;
                                        }
-                                       if(timeout <= 0) {
+                                       if(noTimeLeft) {
                                                for(int 
i=0;i<waiters.length;i++) {
+                                                       
if(!waiters[i].pn.isConnected()) continue;
                                                        
if(!waiters[i].completedTransfer) {
                                                                
waiters[i].completedTransfer(false);
                                                        }
@@ -701,6 +703,7 @@
                                        if(noTimeLeft) {
                                                Logger.minor(this, "Overall 
timeout on "+InsertSender.this);
                                                for(int 
i=0;i<waiters.length;i++) {
+                                                       
if(!waiters[i].pn.isConnected()) continue;
                                                        
if(!waiters[i].receivedCompletionNotice)
                                                                
waiters[i].completed(false, false);
                                                        
if(!waiters[i].completedTransfer)
@@ -724,6 +727,7 @@
                        boolean completedTransfers = true;
                        synchronized(nodesWaitingForCompletion) {
                                for(int i=0;i<waiters.length;i++) {
+                                       if(!waiters[i].pn.isConnected()) 
continue;
                                        if(!waiters[i].completedTransfer) {
                                                completedTransfers = false;
                                                break;
@@ -737,6 +741,7 @@
                                                        // Timed out
                                                }
                                                for(int 
i=0;i<waiters.length;i++) {
+                                                       
if(!waiters[i].pn.isConnected()) continue;
                                                        
if(!waiters[i].completedTransfer) {
                                                                
completedTransfers = false;
                                                                break;

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-12-06 16:20:58 UTC (rev 
7682)
+++ trunk/freenet/src/freenet/node/Version.java 2005-12-07 02:57:13 UTC (rev 
7683)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 281;
+       public static final int buildNumber = 282;

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 281;
+       public static final int lastGoodBuild = 282;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;


Reply via email to