Author: nextgens
Date: 2008-08-16 23:11:40 +0000 (Sat, 16 Aug 2008)
New Revision: 21944
Modified:
trunk/freenet/src/freenet/client/async/USKFetcher.java
trunk/freenet/src/freenet/client/async/USKManager.java
Log:
USKManager: run each callback as a different job so that we aren't stuck if one
throws or doesn't return
Modified: trunk/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcher.java 2008-08-16
22:14:55 UTC (rev 21943)
+++ trunk/freenet/src/freenet/client/async/USKFetcher.java 2008-08-16
23:11:40 UTC (rev 21944)
@@ -157,6 +157,7 @@
checker.schedule();
}
+ @Override
public String toString() {
return "USKAttempt for "+number+" for
"+origUSK.getURI()+" for "+USKFetcher.this;
}
@@ -451,7 +452,7 @@
if (delay<=0) {
schedule();
} else {
- uskManager.ticker.queueTimedJob(new Runnable() {
+ ctx.ticker.queueTimedJob(new Runnable() {
public void run() {
USKFetcher.this.schedule();
}
Modified: trunk/freenet/src/freenet/client/async/USKManager.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKManager.java 2008-08-16
22:14:55 UTC (rev 21943)
+++ trunk/freenet/src/freenet/client/async/USKManager.java 2008-08-16
23:11:40 UTC (rev 21944)
@@ -10,7 +10,7 @@
import freenet.keys.USK;
import freenet.node.NodeClientCore;
import freenet.node.RequestStarter;
-import freenet.node.Ticker;
+import freenet.support.Executor;
import freenet.support.LRUQueue;
import freenet.support.Logger;
@@ -42,7 +42,7 @@
final ClientRequestScheduler chkRequestScheduler;
final ClientRequestScheduler sskRequestScheduler;
- final Ticker ticker;
+ final Executor executor;
public USKManager(NodeClientCore core) {
@@ -57,7 +57,7 @@
checkersByUSK = new HashMap();
backgroundFetchersByClearUSK = new HashMap();
temporaryBackgroundFetchersLRU = new LRUQueue();
- ticker = core.getTicker();
+ executor = core.getExecutor();
}
/**
@@ -152,13 +152,13 @@
}
if(callbacks != null) {
// Run off-thread, because of locking, and because
client callbacks may take some time
- ticker.queueTimedJob(new Runnable() {
- public void run() {
- USK usk = origUSK.copy(number);
- for(int i=0;i<callbacks.length;i++)
-
callbacks[i].onFoundEdition(number, usk);
- }
- }, 0);
+ final USK usk = origUSK.copy(number);
+ for(final USKCallback callback : callbacks)
+ executor.execute(new Runnable() {
+ public void run() {
+ callback.onFoundEdition(number,
usk);
+ }
+ }, "USKManager callback executor for "
+callback);
}
}
@@ -204,11 +204,11 @@
cb.onFoundEdition(curEd, origUSK.copy(curEd));
final USKFetcher fetcher = sched;
if(fetcher != null) {
- ticker.queueTimedJob(new Runnable() {
+ executor.execute(new Runnable() {
public void run() {
fetcher.schedule();
}
- }, 0);
+ }, "USKManager.schedule for "+fetcher);
}
}