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>

Reply via email to