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>