r26856 - trunk/freenet/src/freenet/client/async

[email protected] Wed, 15 Apr 2009 22:10:57 +0000
Newsgroups gmane.network.freenet.cvs
Message-ID <[email protected]>
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) {