Author: toad
Date: 2008-05-22 22:48:42 +0000 (Thu, 22 May 2008)
New Revision: 20052

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Since we do the move-from-queue off-thread, we should wake the starter when 
we're done (if there were any keys moved).

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-05-22 22:45:16 UTC (rev 20051)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-05-22 22:48:42 UTC (rev 20052)
@@ -432,7 +432,8 @@
                databaseExecutor.execute(new Runnable() {
                        public void run() {
                                try {
-                                       
moveKeysFromCooldownQueue(persistentCooldownQueue, selectorContainer);
+                                       
if(moveKeysFromCooldownQueue(persistentCooldownQueue, selectorContainer))
+                                               starter.wakeUp();
                                } catch (Throwable t) {
                                        Logger.error(this, "Caught "+t, t);
                                }
@@ -440,13 +441,15 @@
                }, "moveKeysFromCooldownQueue");
        }

-       private void moveKeysFromCooldownQueue(CooldownQueue queue, 
ObjectContainer container) {
-               if(queue == null) return;
+       private boolean moveKeysFromCooldownQueue(CooldownQueue queue, 
ObjectContainer container) {
+               if(queue == null) return false;
                long now = System.currentTimeMillis();
                final int MAX_KEYS = 1024;
+               boolean found = false;
                while(true) {
                Key[] keys = queue.removeKeyBefore(now, container, MAX_KEYS);
-               if(keys == null) return;
+               if(keys == null) return found;
+               found = true;
                for(int j=0;j<keys.length;j++) {
                        Key key = keys[j];
                        if(logMINOR) Logger.minor(this, "Restoring key: "+key);
@@ -465,7 +468,7 @@
                                        
transientGets[i].requeueAfterCooldown(key, now);
                        }
                }
-               if(keys.length < MAX_KEYS) return;
+               if(keys.length < MAX_KEYS) return found;
                }
        }



Reply via email to