Author: nextgens
Date: 2007-02-28 18:50:58 +0000 (Wed, 28 Feb 2007)
New Revision: 11928

Modified:
   trunk/freenet/src/freenet/client/InsertBlock.java
   trunk/freenet/src/freenet/client/async/SingleFileInserter.java
Log:
Free the data as soon as we don't need it anymore!

might require some testing though

Modified: trunk/freenet/src/freenet/client/InsertBlock.java
===================================================================
--- trunk/freenet/src/freenet/client/InsertBlock.java   2007-02-28 17:25:08 UTC 
(rev 11927)
+++ trunk/freenet/src/freenet/client/InsertBlock.java   2007-02-28 18:50:58 UTC 
(rev 11928)
@@ -28,5 +28,8 @@
        public Bucket getData() {
                return data;
        }
-
+       
+       public void free(){
+               data.free();
+       }
 }

Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
2007-02-28 17:25:08 UTC (rev 11927)
+++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
2007-02-28 18:50:58 UTC (rev 11928)
@@ -391,7 +391,11 @@
                        if(logMINOR) Logger.minor(this, "onSuccess("+state+") 
for "+this);
                        boolean lateStart = false;
                        synchronized(this) {
-                               if(finished) return;
+                               if(finished){
+                                       if(freeData)
+                                               block.free();
+                                       return;
+                               }
                                if(state == sfi) {
                                        if(logMINOR) Logger.minor(this, 
"Splitfile insert succeeded for "+this+" : "+state);
                                        splitInsertSuccess = true;
@@ -421,7 +425,11 @@

                public void onFailure(InserterException e, ClientPutState 
state) {
                        synchronized(this) {
-                               if(finished) return;
+                               if(finished){
+                                       if(freeData)
+                                               block.free();
+                                       return;
+                               }
                        }
                        fail(e);
                }
@@ -517,7 +525,11 @@
                        ClientPutState oldSFI = null;
                        ClientPutState oldMetadataPutter = null;
                        synchronized(this) {
-                               if(finished) return;
+                               if(finished){
+                                       if(freeData)
+                                               block.free();
+                                       return;
+                               }
                                finished = true;
                                oldSFI = sfi;
                                oldMetadataPutter = metadataPutter;
@@ -552,6 +564,9 @@
                                oldSFI.cancel();
                        if(oldMetadataPutter != null)
                                oldMetadataPutter.cancel();
+                       
+                       if(freeData)
+                               block.free();
                }

                public void onBlockSetFinished(ClientPutState state) {
@@ -659,6 +674,8 @@
        }

        public void cancel() {
+               if(freeData)
+                       block.free();
        }

        public void schedule() throws InserterException {


Reply via email to