Author: toad
Date: 2007-04-14 20:00:30 +0000 (Sat, 14 Apr 2007)
New Revision: 12715

Modified:
   trunk/freenet/src/freenet/node/CHKInsertSender.java
Log:
Wait for final status first, and do so efficiently

Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/CHKInsertSender.java 2007-04-14 19:54:42 UTC 
(rev 12714)
+++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2007-04-14 20:00:30 UTC 
(rev 12715)
@@ -164,7 +164,7 @@
     private boolean sentRequest;

     /** List of nodes we are waiting for either a transfer completion
-     * notice or a transfer completion from. */
+     * notice or a transfer completion from. Also used as a sync object for 
waiting for transfer completion. */
     private Vector nodesWaitingForCompletion;

     /** Have all transfers completed and all nodes reported completion status? 
*/
@@ -645,6 +645,16 @@

                public void run() {
                        if(logMINOR) Logger.minor(this, "Starting "+this);
+                       synchronized(CHKInsertSender.this) {
+                               while(status == NOT_FINISHED || setStatusTime 
== -1) {
+                                       try {
+                                               
CHKInsertSender.this.wait(100*1000);
+                                       } catch (InterruptedException e) {
+                                               // Ignore
+                                       }
+                               }
+                       }
+                       
                        while(true) {
                        AwaitingCompletion[] waiters;
                        synchronized(nodesWaitingForCompletion) {
@@ -658,7 +668,8 @@
                        boolean noTimeLeft = false;

                        long now = System.currentTimeMillis();
-                       if((status == NOT_FINISHED) || (setStatusTime == -1) || 
transfersCompletedTime == -1) {
+                       
+                       if(transfersCompletedTime == -1) {
                                // Wait 5 seconds, then try again
                                timeout = 5000;
                        } else {


Reply via email to