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 {