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