Author: toad
Date: 2009-02-18 13:49:05 +0000 (Wed, 18 Feb 2009)
New Revision: 25683

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
Log:
Object leak fixes in removeSubSegments: remove the vector, don't store it


Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2009-02-18 13:41:29 UTC (rev 25682)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2009-02-18 13:49:05 UTC (rev 25683)
@@ -357,7 +357,7 @@
                        parentFetcher.removeMyPendingKeys(this, container, 
context);
                        if(persistent)
                                container.deactivate(parentFetcher, 1);
-                       removeSubSegments(container, context);
+                       removeSubSegments(container, context, false);
                        decode(container, context);
                } else if(allFailed) {
                        fail(new FetchException(FetchException.SPLITFILE_ERROR, 
errors), container, context, true);
@@ -1017,7 +1017,7 @@
                                checkKeys[i] = null;
                        }
                }
-               removeSubSegments(container, context);
+               removeSubSegments(container, context, false);
                if(persistent) {
                        container.store(this);
                        container.activate(parentFetcher, 1);
@@ -1126,7 +1126,7 @@
                return true;
        }
 
-       private void removeSubSegments(ObjectContainer container, ClientContext 
context) {
+       private void removeSubSegments(ObjectContainer container, ClientContext 
context, boolean finishing) {
                if(persistent)
                        container.activate(subSegments, 1);
                SplitFileFetcherSubSegment[] deadSegs;
@@ -1144,7 +1144,7 @@
                        if(persistent)
                                container.deactivate(deadSegs[i], 1);
                }
-               if(persistent) {
+               if(persistent && !finishing) {
                        container.store(this);
                        container.store(subSegments);
                }
@@ -1548,7 +1548,8 @@
                if(logMINOR) Logger.minor(this, "removing "+this);
                if(decodedData != null)
                        freeDecodedData(container);
-               removeSubSegments(container, context);
+               removeSubSegments(container, context, true);
+               container.delete(subSegments);
                for(int i=0;i<dataKeys.length;i++) {
                        if(dataKeys[i] != null) 
dataKeys[i].removeFrom(container);
                        dataKeys[i] = null;

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

Reply via email to