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