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);


Reply via email to