On Saturday 20 December 2008 16:15, j16sdiz at freenetproject.org wrote:
> Author: j16sdiz
> Date: 2008-12-20 16:15:15 +0000 (Sat, 20 Dec 2008)
> New Revision: 24675
>
> 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:
> Revert "set parent=null when cancel()"
> This cause NPE, yet not fixing the leak :(
> Anybody have an idea why it leaks?
Thanks for reverting those commits, they were baaaad. Something, most likely
the pendingKeys map, is keeping a link on one of the SplitFileFetcher*
structures. If it *is* the pendingKeys map, this is fixed in the db4o branch.
I can look into it if it is critical for making the spider work - is it? Not
being able to unload is NOT critical.
>
> Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
> ===================================================================
> --- trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
> 2008-12-20
16:01:36 UTC (rev 24674)
> +++ trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
> 2008-12-20
16:15:15 UTC (rev 24675)
> @@ -33,7 +33,7 @@
> final ArchiveContext archiveContext;
> final LinkedList decompressors;
> final ClientMetadata clientMetadata;
> - ClientRequester parent;
> + final ClientRequester parent;
> final GetCompletionCallback cb;
> final int recursionLevel;
> /** The splitfile type. See the SPLITFILE_ constants on Metadata. */
> @@ -295,7 +295,6 @@
> public void cancel() {
> for(int i=0;i<segments.length;i++)
> segments[i].cancel();
> - parent = null;
> }
>
> public long getToken() {
> @@ -303,9 +302,6 @@
> }
>
> 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 16:01:36 UTC (rev 24674)
> +++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-12-20 16:15:15 UTC (rev 24675)
> @@ -124,7 +124,7 @@
> }
>
> public synchronized boolean isFinished() {
> - return finished || parentFetcher.parent == null ||
parentFetcher.parent.isCancelled();
> + return finished || 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 != null && parentFetcher.parent
> instanceof
ClientGetter)
> + if(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 != null && parentFetcher.parent
> instanceof
ClientGetter) {
> + if(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 != null && parentFetcher.parent
> instanceof
ClientGetter) {
> + if(parentFetcher.parent instanceof ClientGetter) {
> ClientGetter getter = (ClientGetter)
> (parentFetcher.parent);
> if(getter.collectingBinaryBlob()) {
> try {
> @@ -410,11 +410,9 @@
> // :(
> 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...
> @@ -543,8 +541,7 @@
> synchronized(this) {
> scheduled = true;
> }
> - if (parentFetcher.parent != null)
> - parentFetcher.parent.notifyClients();
> + 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 16:01:36 UTC (rev 24674)
> +++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-12-20 16:15:15 UTC (rev 24675)
> @@ -302,10 +302,7 @@
>
> @Override
> public Object getClient() {
> - if (segment.parentFetcher.parent != null)
> - return segment.parentFetcher.parent.getClient();
> - else
> - return null;
> + return segment.parentFetcher.parent.getClient();
> }
>
> @Override
> @@ -315,10 +312,7 @@
>
> @Override
> public short getPriorityClass() {
> - if (segment.parentFetcher.parent != null)
> - return segment.parentFetcher.parent.priorityClass;
> - else
> - return -1;
> + return segment.parentFetcher.parent.priorityClass;
> }
>
> @Override
>
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20090110/6a0c7c52/attachment.pgp>