Author: toad
Date: 2007-07-14 15:15:43 +0000 (Sat, 14 Jul 2007)
New Revision: 14113

Modified:
   trunk/freenet/src/freenet/client/async/USKManager.java
Log:
Run USK subscription callbacks off-thread

Modified: trunk/freenet/src/freenet/client/async/USKManager.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKManager.java      2007-07-14 
15:11:16 UTC (rev 14112)
+++ trunk/freenet/src/freenet/client/async/USKManager.java      2007-07-14 
15:15:43 UTC (rev 14113)
@@ -129,11 +129,11 @@
                if(sched != null) sched.schedule();
        }

-       void update(USK origUSK, long number) {
+       void update(final USK origUSK, final long number) {
                boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR) Logger.minor(this, "Updating "+origUSK.getURI()+" 
: "+number);
                USK clear = origUSK.clearCopy();
-               USKCallback[] callbacks;
+               final USKCallback[] callbacks;
                synchronized(this) {
                        Long l = (Long) latestVersionByClearUSK.get(clear);
                        if(logMINOR) Logger.minor(this, "Old value: "+l);
@@ -145,9 +145,14 @@
                        callbacks = (USKCallback[]) 
subscribersByClearUSK.get(clear);
                }
                if(callbacks != null) {
-                       USK usk = origUSK.copy(number);
-                       for(int i=0;i<callbacks.length;i++)
-                               callbacks[i].onFoundEdition(number, usk);
+                       // 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);
                }
        }



Reply via email to