Author: toad
Date: 2009-03-06 22:20:19 +0000 (Fri, 06 Mar 2009)
New Revision: 25905

Modified:
   branches/db4o/freenet/src/freenet/client/InsertBlock.java
Log:
nullData(), removeFrom(), don't remove in free()... callers must call nullData 
if necessary and then removeFrom()


Modified: branches/db4o/freenet/src/freenet/client/InsertBlock.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/InsertBlock.java   2009-03-06 
22:19:25 UTC (rev 25904)
+++ branches/db4o/freenet/src/freenet/client/InsertBlock.java   2009-03-06 
22:20:19 UTC (rev 25905)
@@ -13,10 +13,10 @@
  */
 public class InsertBlock {
 
-       private final Bucket data;
+       private Bucket data;
        private boolean isFreed;
-       public final FreenetURI desiredURI;
-       public final ClientMetadata clientMetadata;
+       public FreenetURI desiredURI;
+       public ClientMetadata clientMetadata;
        
        public InsertBlock(Bucket data, ClientMetadata metadata, FreenetURI 
desiredURI) {
                if(data == null) throw new NullPointerException();
@@ -41,14 +41,36 @@
                data.free();
                if(container != null) {
                        data.removeFrom(container);
-                       container.delete(this);
                }
        }
        
+       public void removeFrom(ObjectContainer container) {
+               if(data != null) {
+                       container.activate(data, 1);
+                       data.removeFrom(container);
+               }
+               if(desiredURI != null) {
+                       container.activate(desiredURI, 5);
+                       desiredURI.removeFrom(container);
+               }
+               if(clientMetadata != null) {
+                       container.activate(clientMetadata, 5);
+                       clientMetadata.removeFrom(container);
+               }
+               container.delete(this);
+       }
+       
        public void objectOnActivate(ObjectContainer container) {
                // Cascading activation of dependancies
                container.activate(data, 1); // will cascade
                container.activate(desiredURI, 5);
        }
 
+       /** Null out the data so it doesn't get removed in removeFrom().
+        * Call this when the data becomes somebody else's problem. You should 
clone()
+        * the desiredURI and clientMetadata, since these are always removed. */
+       public void nullData() {
+               data = null;
+       }
+       
 }

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

Reply via email to