Author: toad
Date: 2009-04-18 15:24:17 +0000 (Sat, 18 Apr 2009)
New Revision: 26978

Modified:
   trunk/freenet/src/freenet/client/async/USKFetcher.java
   trunk/freenet/src/freenet/client/async/USKManager.java
Log:
Call onFinished() when USKFetcher is finished, related bugfixes


Modified: trunk/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcher.java      2009-04-18 
15:23:45 UTC (rev 26977)
+++ trunk/freenet/src/freenet/client/async/USKFetcher.java      2009-04-18 
15:24:17 UTC (rev 26978)
@@ -309,6 +309,7 @@
                        schedule(end-now, null, context);
                } else {
                        uskManager.unsubscribe(origUSK, this);
+                       uskManager.onFinished(this);
                        long ed = uskManager.lookupLatestSlot(origUSK);
                        USKFetcherCallback[] cb;
                        synchronized(this) {
@@ -543,13 +544,13 @@
                uskManager.unsubscribe(origUSK, this);
                assert(container == null);
                USKAttempt[] attempts;
+               uskManager.onFinished(this);
                synchronized(this) {
                        cancelled = true;
                        attempts = runningAttempts.toArray(new 
USKAttempt[runningAttempts.size()]);
                }
                for(int i=0;i<attempts.length;i++)
                        attempts[i].cancel(container, context);
-               uskManager.onCancelled(this);
        }
 
        /** Set of interested USKCallbacks. Note that we don't actually

Modified: trunk/freenet/src/freenet/client/async/USKManager.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKManager.java      2009-04-18 
15:23:45 UTC (rev 26977)
+++ trunk/freenet/src/freenet/client/async/USKManager.java      2009-04-18 
15:24:17 UTC (rev 26978)
@@ -147,6 +147,7 @@
                        if(prefetchContent) {
                                final long min = lookupKnownGood(usk);
                                f.addCallback(new USKFetcherCallback() {
+                                       
                                        public void onCancelled(ObjectContainer 
container, ClientContext context) {
                                                // Ok
                                        }
@@ -363,14 +364,14 @@
                        f = temporaryBackgroundFetchersLRU.get(clear);
                        if(f != null) {
                                f.removeCallback(cb);
-                               if(f.isFinished() || !f.hasCallbacks()) {
+                               if(!f.hasCallbacks()) {
                                        if(toCancel != null) {
                                                toCancelAlt = f;
                                                Logger.error(this, "Subscribed 
in both backgroundFetchers and temporaryBackgroundFetchers???: "+cb+" for 
"+origUSK);
                                        } else {
                                                toCancel = f;
                                        }
-                                               
backgroundFetchersByClearUSK.remove(clear);
+                                               
temporaryBackgroundFetchersLRU.removeKey(clear);
                                }
                        }
                        
@@ -427,14 +428,21 @@
                return temporaryBackgroundFetchersLRU.size();
        }
 
-       public void onCancelled(USKFetcher fetcher) {
-               USK clear = fetcher.getOriginalUSK().clearCopy();
+       public void onFinished(USKFetcher fetcher) {
+               USK orig = fetcher.getOriginalUSK();
+               USK clear = orig.clearCopy();
                synchronized(this) {
                        if(backgroundFetchersByClearUSK.get(clear) == fetcher) {
                                backgroundFetchersByClearUSK.remove(clear);
                                // This shouldn't happen, it's a sanity check: 
the only way we get cancelled is from USKManager, which removes us before 
calling cancel().
                                Logger.error(this, "onCancelled for "+fetcher+" 
- was still registered, how did this happen??", new Exception("debug"));
                        }
+                       if(temporaryBackgroundFetchersLRU.get(clear) == 
fetcher) {
+                               temporaryBackgroundFetchersLRU.removeKey(clear);
+                       }
+                       if(fetchersByUSK.get(orig) == fetcher) {
+                               fetchersByUSK.remove(clear);
+                       }
                }
        }
 

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

Reply via email to