Author: toad
Date: 2009-03-20 20:46:45 +0000 (Fri, 20 Mar 2009)
New Revision: 26123

Modified:
   branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
   branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
   branches/db4o/freenet/src/freenet/client/async/USKManager.java
Log:
Track whether USKFetcherTag owns the FetchContext, delete it if it does


Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java       
2009-03-20 20:46:02 UTC (rev 26122)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java       
2009-03-20 20:46:45 UTC (rev 26123)
@@ -1073,7 +1073,7 @@
                        // Do a thorough, blocking search
                        USKFetcherTag tag = 
                                
context.uskManager.getFetcher(usk.copy(-usk.suggestedEdition), ctx, false, 
requester.persistent(),
-                                               new 
MyUSKFetcherCallback(requester, cb, usk, metaStrings, ctx, actx, maxRetries, 
recursionLevel, dontTellClientGet, l, returnBucket, requester.persistent()), 
container, context);
+                                               new 
MyUSKFetcherCallback(requester, cb, usk, metaStrings, ctx, actx, maxRetries, 
recursionLevel, dontTellClientGet, l, returnBucket, requester.persistent()), 
false, container, context);
                        if(isEssential)
                                requester.addMustSucceedBlocks(1, container);
                        return tag;

Modified: branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java   
2009-03-20 20:46:02 UTC (rev 26122)
+++ branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java   
2009-03-20 20:46:45 UTC (rev 26123)
@@ -36,8 +36,9 @@
        private short pollingPriorityNormal;
        private short pollingPriorityProgress;
        private boolean finished;
+       private final boolean ownFetchContext;
        
-       private USKFetcherTag(USK origUSK, USKFetcherCallback callback, long 
nodeDBHandle, boolean persistent, ObjectContainer container, FetchContext ctx, 
boolean keepLastData, long token) {
+       private USKFetcherTag(USK origUSK, USKFetcherCallback callback, long 
nodeDBHandle, boolean persistent, ObjectContainer container, FetchContext ctx, 
boolean keepLastData, long token, boolean hasOwnFetchContext) {
                this.nodeDBHandle = nodeDBHandle;
                this.callback = callback;
                this.origUSK = origUSK;
@@ -46,6 +47,7 @@
                this.ctx = ctx;
                this.keepLastData = keepLastData;
                this.token = token;
+               this.ownFetchContext = hasOwnFetchContext;
                pollingPriorityNormal = callback.getPollingPriorityNormal();
                pollingPriorityProgress = callback.getPollingPriorityProgress();
                priority = pollingPriorityNormal;
@@ -65,8 +67,8 @@
         * @return
         */
        public static USKFetcherTag create(USK usk, USKFetcherCallback 
callback, long nodeDBHandle, boolean persistent, 
-                       ObjectContainer container, FetchContext ctx, boolean 
keepLast, int token) {
-               USKFetcherTag tag = new USKFetcherTag(usk, callback, 
nodeDBHandle, persistent, container, ctx, keepLast, token);
+                       ObjectContainer container, FetchContext ctx, boolean 
keepLast, int token, boolean hasOwnFetchContext) {
+               USKFetcherTag tag = new USKFetcherTag(usk, callback, 
nodeDBHandle, persistent, container, ctx, keepLast, token, hasOwnFetchContext);
                if(persistent) container.store(tag);
                return tag;
        }
@@ -207,6 +209,10 @@
        public void removeFrom(ObjectContainer container, ClientContext 
context) {
                container.activate(origUSK, 5);
                origUSK.removeFrom(container);
+               if(ownFetchContext) {
+                       container.activate(ctx, 1);
+                       ctx.removeFrom(container);
+               }
                container.delete(this);
        }
        

Modified: branches/db4o/freenet/src/freenet/client/async/USKManager.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKManager.java      
2009-03-20 20:46:02 UTC (rev 26122)
+++ branches/db4o/freenet/src/freenet/client/async/USKManager.java      
2009-03-20 20:46:45 UTC (rev 26123)
@@ -78,8 +78,8 @@
        }
 
        public USKFetcherTag getFetcher(USK usk, FetchContext ctx, boolean 
keepLast, boolean persistent, 
-                       USKFetcherCallback callback, ObjectContainer container, 
ClientContext context) {
-               return USKFetcherTag.create(usk, callback, 
context.nodeDBHandle, persistent, container, ctx, keepLast, 0);
+                       USKFetcherCallback callback, boolean ownFetchContext, 
ObjectContainer container, ClientContext context) {
+               return USKFetcherTag.create(usk, callback, 
context.nodeDBHandle, persistent, container, ctx, keepLast, 0, ownFetchContext);
        }
 
        synchronized USKFetcher getFetcher(USK usk, FetchContext ctx,
@@ -98,7 +98,7 @@
        }
        
        public USKFetcherTag getFetcherForInsertDontSchedule(USK usk, short 
prioClass, USKFetcherCallback cb, RequestClient client, ObjectContainer 
container, ClientContext context, boolean persistent) {
-               return getFetcher(usk, persistent ? new 
FetchContext(backgroundFetchContext, FetchContext.IDENTICAL_MASK, false, null) 
: backgroundFetchContext, true, client.persistent(), cb, container, context);
+               return getFetcher(usk, persistent ? new 
FetchContext(backgroundFetchContext, FetchContext.IDENTICAL_MASK, false, null) 
: backgroundFetchContext, true, client.persistent(), cb, true, container, 
context);
        }
 
        public void startTemporaryBackgroundFetcher(USK usk, ClientContext 
context) {

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

Reply via email to