Author: toad
Date: 2007-04-14 16:00:53 +0000 (Sat, 14 Apr 2007)
New Revision: 12695
Modified:
trunk/freenet/src/freenet/node/CHKInsertSender.java
trunk/freenet/src/freenet/node/InsertHandler.java
Log:
Notify of failed receive earlier, sync fixes on it
Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/CHKInsertSender.java 2007-04-14 15:52:50 UTC
(rev 12694)
+++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2007-04-14 16:00:53 UTC
(rev 12695)
@@ -591,8 +591,9 @@
* Called by InsertHandler to notify that the receive has
* failed.
*/
- public void receiveFailed() {
+ public synchronized void receiveFailed() {
receiveFailed = true;
+ notifyAll();
}
/**
Modified: trunk/freenet/src/freenet/node/InsertHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertHandler.java 2007-04-14 15:52:50 UTC
(rev 12694)
+++ trunk/freenet/src/freenet/node/InsertHandler.java 2007-04-14 16:00:53 UTC
(rev 12695)
@@ -190,9 +190,7 @@
// Cool, probably this is because the receive failed...
}
}
- if(receiveFailed) {
- // Cancel the sender
- sender.receiveFailed(); // tell it to stop if it hasn't
already failed... unless it's sending from store
+ if(receiveFailed()) {
// Nothing else we can do
finish(CHKInsertSender.RECEIVE_FAILED);
return;
@@ -331,14 +329,14 @@
if(code != CHKInsertSender.TIMED_OUT && code !=
CHKInsertSender.GENERATED_REJECTED_OVERLOAD &&
code != CHKInsertSender.INTERNAL_ERROR && code !=
CHKInsertSender.ROUTE_REALLY_NOT_FOUND &&
- code != CHKInsertSender.RECEIVE_FAILED &&
!receiveFailed) {
+ code != CHKInsertSender.RECEIVE_FAILED &&
!receiveFailed()) {
int totalSent = getTotalSentBytes();
int totalReceived = getTotalReceivedBytes();
if(sender != null) {
totalSent += sender.getTotalSentBytes();
totalReceived += sender.getTotalReceivedBytes();
}
- if(logMINOR) Logger.minor(this, "Remote CHK insert cost
"+totalSent+ '/' +totalReceived+" bytes ("+code+ ") receive failed =
"+sender.failedReceive());
+ if(logMINOR) Logger.minor(this, "Remote CHK insert cost
"+totalSent+ '/' +totalReceived+" bytes ("+code+ ") receive failed =
"+receiveFailed());
node.nodeStats.remoteChkInsertBytesSentAverage.report(totalSent);
node.nodeStats.remoteChkInsertBytesReceivedAverage.report(totalReceived);
if(code == CHKInsertSender.SUCCESS) {
@@ -393,7 +391,11 @@
if(logMINOR) Logger.minor(this, "Received data for
"+InsertHandler.this);
maybeCommit();
} catch (RetrievalException e) {
- receiveFailed = true;
+ synchronized(InsertHandler.this) {
+ receiveFailed = true;
+ }
+ // Cancel the sender
+ sender.receiveFailed(); // tell it to stop if it hasn't
already failed... unless it's sending from store
runThread.interrupt();
Message msg = DMT.createFNPDataInsertRejected(uid,
DMT.DATA_INSERT_REJECTED_RECEIVE_FAILED);
try {
@@ -414,6 +416,10 @@
}
+ private synchronized boolean receiveFailed() {
+ return receiveFailed;
+ }
+
private final Object totalSync = new Object();
private int totalSentBytes;
private int totalReceivedBytes;