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);
                }
        }



Reply via email to