Author: j16sdiz
Date: 2008-12-20 15:53:40 +0000 (Sat, 20 Dec 2008)
New Revision: 24672

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
Log:
yet another leak that prevent plugin unload

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-12-20 15:50:13 UTC (rev 24671)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-12-20 15:53:40 UTC (rev 24672)
@@ -5,6 +5,7 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.lang.ref.WeakReference;
 import java.util.LinkedList;
 
 import freenet.client.ArchiveContext;
@@ -33,7 +34,7 @@
        final ArchiveContext archiveContext;
        final LinkedList decompressors;
        final ClientMetadata clientMetadata;
-       final ClientRequester parent;
+       final WeakReference<ClientRequester> parent;
        final GetCompletionCallback cb;
        final int recursionLevel;
        /** The splitfile type. See the SPLITFILE_ constants on Metadata. */
@@ -68,7 +69,7 @@
                this.clientMetadata = clientMetadata;
                this.cb = rcb;
                this.recursionLevel = recursionLevel + 1;
-               this.parent = parent2;
+               this.parent = new WeakReference<ClientRequester>(parent2);
                if(parent2.isCancelled())
                        throw new FetchException(FetchException.CANCELLED);
                overrideLength = metadata.dataLength();
@@ -166,8 +167,9 @@
                                throw new 
FetchException(FetchException.INVALID_METADATA, "Unable to allocate all check 
blocks to segments - buggy or malicious inserter");
                }
                this.token = token2;
-               parent.addBlocks(splitfileDataBlocks.length + 
splitfileCheckBlocks.length);
-               parent.addMustSucceedBlocks(splitfileDataBlocks.length);
+                               
+               parent2.addBlocks(splitfileDataBlocks.length + 
splitfileCheckBlocks.length);
+               parent2.addMustSucceedBlocks(splitfileDataBlocks.length);
        }
 
        /** Return the final status of the fetch. Throws an exception, or 
returns a 
@@ -302,7 +304,11 @@
        }
 
        public void scheduleOffThread() {
-               
fetchContext.slowSerialExecutor[parent.priorityClass].execute(new Runnable() {
+               ClientRequester p = parent.get();
+               if (p == null)
+                       return;
+
+               fetchContext.slowSerialExecutor[p.priorityClass].execute(new 
Runnable() {
                        public void run() {
                                schedule();
                        }

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

Reply via email to