Author: toad
Date: 2008-04-30 20:27:06 +0000 (Wed, 30 Apr 2008)
New Revision: 19635

Modified:
   trunk/freenet/src/freenet/client/async/USKManager.java
Log:
Prevent race condition - check whether it's the same fetcher.

Modified: trunk/freenet/src/freenet/client/async/USKManager.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKManager.java      2008-04-30 
18:04:16 UTC (rev 19634)
+++ trunk/freenet/src/freenet/client/async/USKManager.java      2008-04-30 
20:27:06 UTC (rev 19635)
@@ -301,7 +301,8 @@
        public void onCancelled(USKFetcher fetcher) {
                USK clear = fetcher.getOriginalUSK().clearCopy();
                synchronized(this) {
-                       if(backgroundFetchersByClearUSK.remove(clear) != null) {
+                       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"));
                        }


Reply via email to