Author: toad
Date: 2007-02-14 19:46:40 +0000 (Wed, 14 Feb 2007)
New Revision: 11789
Modified:
trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
Log:
Check for cancelled flag in various places.
We have this in addition to the direct approach (ClientGetter.cancel calls
SplitFileInserter.cancel etc) because the complexities of SingleFileFetcher etc
mean it's easier to check the flag than to keep currentState up to date
especially in complicated cases like multi-level metadata or archive fetches.
Modified: trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
2007-02-14 19:13:10 UTC (rev 11788)
+++ trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
2007-02-14 19:46:40 UTC (rev 11789)
@@ -135,8 +135,10 @@
}
public void onFailure(LowLevelPutException e) {
- if(parent.isCancelled())
+ if(parent.isCancelled()) {
fail(new
InserterException(InserterException.CANCELLED));
+ return;
+ }
switch(e.code) {
case LowLevelPutException.COLLISION:
@@ -254,6 +256,10 @@
public void onSuccess() {
if(logMINOR) Logger.minor(this, "Succeeded ("+this+"): "+token);
+ if(parent.isCancelled()) {
+ fail(new
InserterException(InserterException.CANCELLED));
+ return;
+ }
synchronized(this) {
finished = true;
}
Modified: trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
2007-02-14 19:13:10 UTC (rev 11788)
+++ trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
2007-02-14 19:46:40 UTC (rev 11789)
@@ -183,6 +183,11 @@
}
private void onSuccess(FetchResult result) {
+ if(parent.isCancelled()) {
+ result.asBucket().free();
+ onFailure(new FetchException(FetchException.CANCELLED));
+ return;
+ }
if(!decompressors.isEmpty()) {
Bucket data = result.asBucket();
while(!decompressors.isEmpty()) {
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2007-02-14 19:13:10 UTC (rev 11788)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2007-02-14 19:46:40 UTC (rev 11789)
@@ -463,12 +463,20 @@
}
public void onSuccess(ClientPutState state) {
+ if(parent.parent.isCancelled()) {
+ parent.cancel();
+ return;
+ }
SingleBlockInserter sbi = (SingleBlockInserter)state;
int x = sbi.token;
completed(x);
}
public void onFailure(InserterException e, ClientPutState state) {
+ if(parent.parent.isCancelled()) {
+ parent.cancel();
+ return;
+ }
SingleBlockInserter sbi = (SingleBlockInserter)state;
int x = sbi.token;
errors.merge(e);