Author: toad
Date: 2009-03-11 16:32:37 +0000 (Wed, 11 Mar 2009)
New Revision: 25987

Modified:
   branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
Log:
Free when set finished, not later (don't double free or forget to free). If 
freeData is false, nullData() to prevent it from being removed.


Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2009-03-11 16:26:59 UTC (rev 25986)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2009-03-11 16:32:37 UTC (rev 25987)
@@ -567,11 +567,6 @@
                        ClientPutState toRemove = null;
                        synchronized(this) {
                                if(finished){
-                                       if(freeData) {
-                                               block.free(container);
-                                               if(persistent)
-                                                       container.store(this);
-                                       }
                                        return;
                                }
                                if(state == sfi) {
@@ -595,6 +590,13 @@
                                if(splitInsertSuccess && metaInsertSuccess) {
                                        if(logMINOR) Logger.minor(this, "Both 
succeeded for "+this);
                                        finished = true;
+                                       if(freeData) {
+                                               block.free(container);
+                                               if(persistent)
+                                                       container.store(this);
+                                       } else {
+                                               block.nullData();
+                                       }
                                }
                        }
                        if(toRemove != null && persistent)
@@ -629,8 +631,6 @@
                                        Logger.error(this, "onFailure() on 
unknown state "+state+" on "+this);
                                }
                                if(finished){
-                                       if(freeData)
-                                               block.free(container);
                                        toFail = false; // Already failed
                                }
                        }
@@ -742,9 +742,12 @@
                                container.activate(block, 2);
                        synchronized(this) {
                                if(finished){
+                                       return;
+                               } else {
                                        if(freeData)
                                                block.free(container);
-                                       return;
+                                       else
+                                               block.nullData();
                                }
                                finished = true;
                                oldSFI = sfi;
@@ -809,6 +812,8 @@
                                if(persistent)
                                        container.activate(block, 2);
                                block.free(container);
+                       } else {
+                               block.nullData();
                        }
                }
 

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

Reply via email to