Author: toad
Date: 2009-04-15 22:10:57 +0000 (Wed, 15 Apr 2009)
New Revision: 26856

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
Factor out removeFrom


Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2009-04-15 20:35:42 UTC (rev 26855)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2009-04-15 22:10:57 UTC (rev 26856)
@@ -701,15 +701,33 @@
                        blockNums.clear();
                        cancelled = true;
                }
-               if(persistent) {
+               if(persistent && oldNums != null && oldNums.length > 0) {
                        for(Integer i : oldNums) container.delete(i);
-                       container.delete(blockNums);
-                       container.delete(this);
-                       if(!dontDeactivateSeg)
-                               container.deactivate(segment, 1);
-                       // We do not need to call SendableGet as it has no 
internal data structures that need deleting.
                }
+               if(persistent) removeFrom(container, context, 
dontDeactivateSeg);
        }
+       
+       public void removeFrom(ObjectContainer container, ClientContext 
context, boolean dontDeactivateSeg) {
+               container.activate(this, 1);
+               container.activate(segment, 1);
+               container.activate(blockNums, 1);
+               synchronized(segment) {
+                       if(!cancelled) {
+                               Logger.error(this, "Removing when not 
cancelled! on "+this, new Exception("error"));
+                               cancelled = true;
+                       }
+                       if(!blockNums.isEmpty()) {
+                               Logger.error(this, "Removing when blockNums not 
empty! on "+this, new Exception("error"));
+                               for(Integer i : blockNums) container.delete(i);
+                               blockNums.clear();
+                       }
+               }
+               container.delete(blockNums);
+               container.delete(this);
+               if(!dontDeactivateSeg)
+                       container.deactivate(segment, 1);
+               // We do not need to call SendableGet as it has no internal 
data structures that need deleting.
+       }
 
        @Override
        public long getCooldownWakeup(Object token, ObjectContainer container) {

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

Reply via email to