Author: toad
Date: 2007-07-13 19:07:23 +0000 (Fri, 13 Jul 2007)
New Revision: 14090

Modified:
   trunk/freenet/src/freenet/client/async/USKManager.java
Log:
Do the potentially heavy subscription on a separate thread.
It was being done on PacketSender when we subscribed to an ARK, this was 
causing mega-backoff.

Modified: trunk/freenet/src/freenet/client/async/USKManager.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKManager.java      2007-07-13 
18:54:06 UTC (rev 14089)
+++ trunk/freenet/src/freenet/client/async/USKManager.java      2007-07-13 
19:07:23 UTC (rev 14090)
@@ -10,6 +10,7 @@
 import freenet.keys.USK;
 import freenet.node.NodeClientCore;
 import freenet.node.RequestStarter;
+import freenet.node.Ticker;
 import freenet.support.LRUQueue;
 import freenet.support.Logger;

@@ -40,6 +41,8 @@
        final FetchContext backgroundFetchContext;
        final ClientRequestScheduler chkRequestScheduler;
        final ClientRequestScheduler sskRequestScheduler;
+       
+       final Ticker ticker;


        public USKManager(NodeClientCore core) {
@@ -54,6 +57,7 @@
                checkersByUSK = new HashMap();
                backgroundFetchersByClearUSK = new HashMap();
                temporaryBackgroundFetchersLRU = new LRUQueue();
+               ticker = core.getTicker();
        }

        /**
@@ -183,8 +187,14 @@
                }
                if(curEd > ed)
                        cb.onFoundEdition(curEd, origUSK.copy(curEd));
-               if(sched != null)
-                       sched.schedule();
+               final USKFetcher fetcher = sched;
+               if(fetcher != null) {
+                       ticker.queueTimedJob(new Runnable() {
+                               public void run() {
+                                       fetcher.schedule();
+                               }
+                       }, 0);
+               }
        }

        public void unsubscribe(USK origUSK, USKCallback cb, boolean 
runBackgroundFetch) {


Reply via email to