Author: j16sdiz
Date: 2008-12-20 16:01:36 +0000 (Sat, 20 Dec 2008)
New Revision: 24674

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
set parent=null when cancel()

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-12-20 15:56:12 UTC (rev 24673)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-12-20 16:01:36 UTC (rev 24674)
@@ -33,7 +33,7 @@
        final ArchiveContext archiveContext;
        final LinkedList decompressors;
        final ClientMetadata clientMetadata;
-       final ClientRequester parent;
+       ClientRequester parent;
        final GetCompletionCallback cb;
        final int recursionLevel;
        /** The splitfile type. See the SPLITFILE_ constants on Metadata. */
@@ -295,6 +295,7 @@
        public void cancel() {
                for(int i=0;i<segments.length;i++)
                        segments[i].cancel();
+               parent = null;
        }
 
        public long getToken() {
@@ -302,6 +303,9 @@
        }
 
        public void scheduleOffThread() {
+               if (parent == null)
+                       return;
+               
                
fetchContext.slowSerialExecutor[parent.priorityClass].execute(new Runnable() {
                        public void run() {
                                schedule();

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-12-20 15:56:12 UTC (rev 24673)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-12-20 16:01:36 UTC (rev 24674)
@@ -124,7 +124,7 @@
        }
 
        public synchronized boolean isFinished() {
-               return finished || parentFetcher.parent.isCancelled();
+               return finished || parentFetcher.parent == null || 
parentFetcher.parent.isCancelled();
        }
 
        public synchronized boolean isFinishing() {
@@ -171,7 +171,7 @@
                boolean decodeNow = false;
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR) Logger.minor(this, "Fetched block "+blockNo+" on 
"+seg+" data="+dataBuckets.length+" check="+checkBuckets.length);
-               if(parentFetcher.parent instanceof ClientGetter)
+               if (parentFetcher.parent != null && parentFetcher.parent 
instanceof ClientGetter)
                        
((ClientGetter)parentFetcher.parent).addKeyToBinaryBlob(block);
                // No need to unregister key, because it will be cleared in 
tripPendingKey().
                boolean dontNotify;
@@ -354,14 +354,14 @@
        }
 
        boolean isCollectingBinaryBlob() {
-               if(parentFetcher.parent instanceof ClientGetter) {
+               if (parentFetcher.parent != null && parentFetcher.parent 
instanceof ClientGetter) {
                        ClientGetter getter = (ClientGetter) 
(parentFetcher.parent);
                        return getter.collectingBinaryBlob();
                } else return false;
        }
        
        private void maybeAddToBinaryBlob(Bucket data, int i, boolean check) 
throws FetchException {
-               if(parentFetcher.parent instanceof ClientGetter) {
+               if (parentFetcher.parent != null && parentFetcher.parent 
instanceof ClientGetter) {
                        ClientGetter getter = (ClientGetter) 
(parentFetcher.parent);
                        if(getter.collectingBinaryBlob()) {
                                try {
@@ -410,9 +410,11 @@
                        // :(
                        if(e.isFatal()) {
                                fatallyFailedBlocks++;
+                               if (parentFetcher.parent != null)
                                parentFetcher.parent.fatallyFailedBlock();
                        } else {
                                failedBlocks++;
+                               if (parentFetcher.parent != null)
                                parentFetcher.parent.failedBlock();
                        }
                        // Once it is no longer possible to have a successful 
fetch, fail...
@@ -541,7 +543,8 @@
                        synchronized(this) {
                                scheduled = true;
                        }
-                       parentFetcher.parent.notifyClients();
+                       if (parentFetcher.parent != null)
+                               parentFetcher.parent.notifyClients();
                        if(logMINOR)
                                Logger.minor(this, "scheduling "+seg+" : 
"+seg.blockNums);
                } catch (Throwable t) {

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2008-12-20 15:56:12 UTC (rev 24673)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2008-12-20 16:01:36 UTC (rev 24674)
@@ -302,7 +302,10 @@
 
        @Override
        public Object getClient() {
-               return segment.parentFetcher.parent.getClient();
+               if (segment.parentFetcher.parent != null)
+                       return segment.parentFetcher.parent.getClient();
+               else
+                       return null;
        }
 
        @Override
@@ -312,7 +315,10 @@
 
        @Override
        public short getPriorityClass() {
-               return segment.parentFetcher.parent.priorityClass;
+               if (segment.parentFetcher.parent != null)
+                       return segment.parentFetcher.parent.priorityClass;
+               else
+                       return -1;
        }
 
        @Override

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to