Author: toad
Date: 2008-12-17 22:57:08 +0000 (Wed, 17 Dec 2008)
New Revision: 24489

Modified:
   branches/db4o/freenet/src/freenet/client/FetchContext.java
   branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
   branches/db4o/freenet/src/freenet/client/async/ClientGetter.java
   branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
   branches/db4o/freenet/src/freenet/client/async/USKFetcher.java
   branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
Log:
removeFrom(). Implement in some places.


Modified: branches/db4o/freenet/src/freenet/client/FetchContext.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/FetchContext.java  2008-12-17 
22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/FetchContext.java  2008-12-17 
22:57:08 UTC (rev 24489)
@@ -5,6 +5,8 @@
 
 import java.util.Set;
 
+import com.db4o.ObjectContainer;
+
 import freenet.client.async.BlockSet;
 import freenet.client.async.USKManager;
 import freenet.client.events.ClientEventProducer;
@@ -44,6 +46,7 @@
        /** If set, contains a set of blocks to be consulted before checking 
the datastore. */
        public BlockSet blocks;
        public Set allowedMIMETypes;
+       private final boolean hasOwnEventProducer;
        
        public FetchContext(long curMaxLength, 
                        long curMaxTempLength, int maxMetadataSize, int 
maxRecursionLevel, int maxArchiveRestarts, int maxArchiveLevels,
@@ -72,6 +75,7 @@
                this.maxCheckBlocksPerSegment = maxCheckBlocksPerSegment;
                this.cacheLocalRequests = cacheLocalRequests;
                this.ignoreTooManyPathComponents = ignoreTooManyPathComponents;
+               hasOwnEventProducer = true;
        }
 
        public FetchContext(FetchContext ctx, int maskID, boolean keepProducer) 
{
@@ -79,6 +83,7 @@
                        this.eventProducer = ctx.eventProducer;
                else
                        this.eventProducer = new SimpleEventProducer();
+               hasOwnEventProducer = !keepProducer;
                this.ignoreTooManyPathComponents = 
ctx.ignoreTooManyPathComponents;
                this.blocks = ctx.blocks;
                this.allowedMIMETypes = ctx.allowedMIMETypes;
@@ -168,5 +173,10 @@
                        throw new Error(e);
                }
        }
+
+       public void removeFrom(ObjectContainer container) {
+               if(hasOwnEventProducer) eventProducer.removeFrom(container);
+               container.delete(this);
+       }
        
 }

Modified: branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientGetState.java  
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/ClientGetState.java  
2008-12-17 22:57:08 UTC (rev 24489)
@@ -16,4 +16,11 @@
        public void cancel(ObjectContainer container, ClientContext context);
 
        public long getToken();
+
+       /**
+        * Once the callback has finished with this fetch, it will call 
removeFrom() to instruct the fetch
+        * to remove itself and all its subsidiary objects from the database.
+        * @param container
+        */
+       public void removeFrom(ObjectContainer container, ClientContext 
context);
 }

Modified: branches/db4o/freenet/src/freenet/client/async/ClientGetter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientGetter.java    
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/ClientGetter.java    
2008-12-17 22:57:08 UTC (rev 24489)
@@ -171,6 +171,7 @@
                        if(returnBucket != null && 
Logger.shouldLog(Logger.MINOR, this))
                                Logger.minor(this, "client.async returned data 
in returnBucket");
                }
+               state.removeFrom(container, context);
                FetchResult res = result;
                if(persistent()) {
                        container.store(this);
@@ -183,6 +184,7 @@
                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Failed from "+state+" : "+e+" on 
"+this, e);
                closeBinaryBlobStream(container, context);
+               state.removeFrom(container, context);
                while(true) {
                        if(e.mode == FetchException.ARCHIVE_RESTART) {
                                int ar;

Modified: 
branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java 
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java 
2008-12-17 22:57:08 UTC (rev 24489)
@@ -177,4 +177,9 @@
                onFailure(e.getFetchException(), false, container, context);
        }
 
+       public void removeFrom(ObjectContainer container, ClientContext 
context) {
+               // TODO Auto-generated method stub
+               
+       }
+
 }

Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java        
2008-12-17 22:57:08 UTC (rev 24489)
@@ -443,7 +443,9 @@
                boolean cbWasActive = true;
                try {
                        synchronized(this) {
-                               if(otherFailure != null) throw otherFailure;
+                               if(otherFailure != null) {
+                                       throw otherFailure;
+                               }
                                if(finished) {
                                        Logger.error(this, "Was already 
finished");
                                        return;
@@ -637,4 +639,14 @@
                cancel(container, context);
        }
 
+       public void removeFrom(ObjectContainer container, ClientContext 
context) {
+               blockFetchContext.removeFrom(container);
+               for(int i=0;i<segments.length;i++) {
+                       SplitFileFetcherSegment segment = segments[i];
+                       segments[i] = null;
+                       segment.removeFrom(container, context);
+               }
+               container.delete(this);
+       }
+
 }

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-12-17 22:57:08 UTC (rev 24489)
@@ -1435,4 +1435,35 @@
                if(persistent)
                        container.store(this);
        }
+
+       public void removeFrom(ObjectContainer container, ClientContext 
context) {
+               freeDecodedData(container);
+               removeSubSegments(container, context);
+               for(int i=0;i<dataKeys.length;i++) {
+                       if(dataKeys[i] != null) 
dataKeys[i].removeFrom(container);
+                       dataKeys[i] = null;
+               }
+               for(int i=0;i<checkKeys.length;i++) {
+                       if(checkKeys[i] != null) 
checkKeys[i].removeFrom(container);
+                       checkKeys[i] = null;
+               }
+               for(int i=0;i<dataBuckets.length;i++) {
+                       MinimalSplitfileBlock block = dataBuckets[i];
+                       if(block.data != null) {
+                               Logger.error(this, "Data block "+i+" still 
present in removeFrom()! on "+this);
+                               block.data.free();
+                       }
+                       block.removeFrom(container);
+               }
+               for(int i=0;i<checkBuckets.length;i++) {
+                       MinimalSplitfileBlock block = checkBuckets[i];
+                       if(block.data != null) {
+                               Logger.error(this, "Check block "+i+" still 
present in removeFrom()! on "+this);
+                               block.data.free();
+                       }
+                       block.removeFrom(container);
+               }
+               errors.removeFrom(container);
+               container.delete(this);
+       }
 }

Modified: branches/db4o/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKFetcher.java      
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/USKFetcher.java      
2008-12-17 22:57:08 UTC (rev 24489)
@@ -607,5 +607,9 @@
        public long getToken() {
                return -1;
        }
+
+       public void removeFrom(ObjectContainer container, ClientContext 
context) {
+               throw new UnsupportedOperationException();
+       }
        
 }

Modified: branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java   
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java   
2008-12-17 22:57:08 UTC (rev 24489)
@@ -201,5 +201,9 @@
        public final boolean isFinished() {
                return finished;
        }
+
+       public void removeFrom(ObjectContainer container, ClientContext 
context) {
+               container.delete(this);
+       }
        
 }

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

Reply via email to