Author: toad
Date: 2007-08-11 17:17:03 +0000 (Sat, 11 Aug 2007)
New Revision: 14617

Modified:
   trunk/freenet/src/freenet/client/async/ClientGetter.java
Log:
Run client callbacks on a separate thread

Modified: trunk/freenet/src/freenet/client/async/ClientGetter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientGetter.java    2007-08-11 
17:09:31 UTC (rev 14616)
+++ trunk/freenet/src/freenet/client/async/ClientGetter.java    2007-08-11 
17:17:03 UTC (rev 14617)
@@ -141,7 +141,13 @@
                        if(returnBucket != null && 
Logger.shouldLog(Logger.MINOR, this))
                                Logger.minor(this, "client.async returned data 
in returnBucket");
                }
-               client.onSuccess(result, this);
+               final FetchResult res = result;
+               ctx.executor.execute(new Runnable() {
+                       public void run() {
+                               client.onSuccess(res, ClientGetter.this);
+                       }
+               }, "ClientGetter onSuccess callback");
+               
        }

        public void onFailure(FetchException e, ClientGetState state) {
@@ -176,7 +182,13 @@
                        if(e.mode == FetchException.DATA_NOT_FOUND && 
super.successfulBlocks > 0)
                                e = new FetchException(e, 
FetchException.ALL_DATA_NOT_FOUND);
                        Logger.minor(this, "onFailure("+e+", "+state+") on 
"+this+" for "+uri, e);
-                       client.onFailure(e, this);
+                       final FetchException e1 = e;
+                       ctx.executor.execute(new Runnable() {
+                               public void run() {
+                                       client.onFailure(e1, ClientGetter.this);
+                               }
+                       }, "ClientGetter onFailure callback");
+                       
                        return;
                }
        }


Reply via email to