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) {