Author: toad
Date: 2009-02-18 20:49:01 +0000 (Wed, 18 Feb 2009)
New Revision: 25709

Modified:
   branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
   branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
   branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
Log:
Free the bucket after unpacking it


Modified: branches/db4o/freenet/src/freenet/client/ArchiveHandler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/ArchiveHandler.java        
2009-02-18 20:02:07 UTC (rev 25708)
+++ branches/db4o/freenet/src/freenet/client/ArchiveHandler.java        
2009-02-18 20:49:01 UTC (rev 25709)
@@ -90,7 +90,7 @@
         * @param container
         * @param context
         */
-       public abstract void extractPersistentOffThread(Bucket bucket, 
ArchiveContext actx, String element, ArchiveExtractCallback callback, 
ObjectContainer container, ClientContext context);
+       public abstract void extractPersistentOffThread(Bucket bucket, boolean 
freeBucket, ArchiveContext actx, String element, ArchiveExtractCallback 
callback, ObjectContainer container, ClientContext context);
        
        public abstract void activateForExecution(ObjectContainer container);
 

Modified: branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java    
2009-02-18 20:02:07 UTC (rev 25708)
+++ branches/db4o/freenet/src/freenet/client/ArchiveHandlerImpl.java    
2009-02-18 20:49:01 UTC (rev 25709)
@@ -97,10 +97,10 @@
         * @param container
         * @param context
         */
-       public void extractPersistentOffThread(Bucket bucket, ArchiveContext 
actx, String element, ArchiveExtractCallback callback, ObjectContainer 
container, final ClientContext context) {
+       public void extractPersistentOffThread(Bucket bucket, boolean 
freeBucket, ArchiveContext actx, String element, ArchiveExtractCallback 
callback, ObjectContainer container, final ClientContext context) {
                assert(element != null); // no callback would be called...
                final ArchiveManager manager = context.archiveManager;
-               final ArchiveExtractTag tag = new ArchiveExtractTag(this, 
bucket, actx, element, callback, context.nodeDBHandle);
+               final ArchiveExtractTag tag = new ArchiveExtractTag(this, 
bucket, freeBucket, actx, element, callback, context.nodeDBHandle);
                container.store(tag);
                runPersistentOffThread(tag, context, manager, 
context.persistentBucketFactory);
        }
@@ -148,6 +148,10 @@
                                                        else
                                                                
tag.callback.gotBucket(data, container, context);
                                                        
tag.callback.removeFrom(container);
+                                                       if(tag.freeBucket) {
+                                                               tag.data.free();
+                                                               
tag.data.removeFrom(container);
+                                                       }
                                                        
container.deactivate(tag.callback, 1);
                                                        container.delete(tag);
                                                }
@@ -162,6 +166,10 @@
                                                        
container.activate(tag.callback, 1);
                                                        
tag.callback.onFailed(e, container, context);
                                                        
tag.callback.removeFrom(container);
+                                                       if(tag.freeBucket) {
+                                                               tag.data.free();
+                                                               
tag.data.removeFrom(container);
+                                                       }
                                                        container.delete(tag);
                                                }
                                                
@@ -175,6 +183,10 @@
                                                        
container.activate(tag.callback, 1);
                                                        
tag.callback.onFailed(e, container, context);
                                                        
tag.callback.removeFrom(container);
+                                                       if(tag.freeBucket) {
+                                                               tag.data.free();
+                                                               
tag.data.removeFrom(container);
+                                                       }
                                                        container.delete(tag);
                                                }
                                                
@@ -251,14 +263,16 @@
        
        final ArchiveHandlerImpl handler;
        final Bucket data;
+       final boolean freeBucket;
        final ArchiveContext actx;
        final String element;
        final ArchiveExtractCallback callback;
        final long nodeDBHandle;
        
-       ArchiveExtractTag(ArchiveHandlerImpl handler, Bucket data, 
ArchiveContext actx, String element, ArchiveExtractCallback callback, long 
nodeDBHandle) {
+       ArchiveExtractTag(ArchiveHandlerImpl handler, Bucket data, boolean 
freeBucket, ArchiveContext actx, String element, ArchiveExtractCallback 
callback, long nodeDBHandle) {
                this.handler = handler;
                this.data = data;
+               this.freeBucket = freeBucket;
                this.actx = actx;
                this.element = element;
                this.callback = callback;

Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java       
2009-02-18 20:02:07 UTC (rev 25708)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java       
2009-02-18 20:49:01 UTC (rev 25709)
@@ -837,7 +837,7 @@
                                if(persistent)
                                        container.activate(actx, 1);
                                ah.activateForExecution(container);
-                               
ah.extractPersistentOffThread(result.asBucket(), actx, element, callback, 
container, context);
+                               
ah.extractPersistentOffThread(result.asBucket(), true, actx, element, callback, 
container, context);
                                if(!wasActive)
                                        
container.deactivate(SingleFileFetcher.this, 1);
                                if(state != null)

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

Reply via email to