Author: toad
Date: 2008-06-17 18:23:26 +0000 (Tue, 17 Jun 2008)
New Revision: 20411
Modified:
branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
Log:
QueueToadlet, restartBlocking().
Modified: branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
2008-06-17 18:17:29 UTC (rev 20410)
+++ branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
2008-06-17 18:23:26 UTC (rev 20411)
@@ -161,13 +161,7 @@
} else if(request.isPartSet("restart_request") &&
(request.getPartAsString("restart_request", 32).length() > 0)) {
String identifier =
request.getPartAsString("identifier", MAX_IDENTIFIER_LENGTH);
if(logMINOR) Logger.minor(this, "Restarting
"+identifier);
- ClientRequest[] clientRequests =
fcp.getGlobalRequests();
- for (int requestIndex = 0, requestCount =
clientRequests.length; requestIndex < requestCount; requestIndex++) {
- ClientRequest clientRequest =
clientRequests[requestIndex];
- if
(clientRequest.getIdentifier().equals(identifier)) {
- clientRequest.restartAsync(fcp);
- }
- }
+ fcp.restartBlocking(identifier);
writePermanentRedirect(ctx, "Done", "/queue/");
return;
} else if(request.isPartSet("remove_AllRequests") &&
(request.getPartAsString("remove_AllRequests", 32).length() > 0)) {
Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java 2008-06-17
18:17:29 UTC (rev 20410)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java 2008-06-17
18:23:26 UTC (rev 20411)
@@ -932,7 +932,54 @@
}
}
}
+
+ public boolean restartBlocking(final String identifier) {
+ ClientRequest req = globalRebootClient.getRequest(identifier,
null);
+ if(req != null) {
+ req.restart(null, core.clientContext);
+ return true;
+ } else {
+ class OutputWrapper {
+ boolean done;
+ boolean success;
+ }
+ final OutputWrapper ow = new OutputWrapper();
+ core.clientContext.jobRunner.queue(new DBJob() {
+ public void run(ObjectContainer container,
ClientContext context) {
+ boolean success = false;
+ try {
+ ClientRequest req =
globalForeverClient.getRequest(identifier, container);
+ if(req != null) {
+ req.restart(container,
context);
+ success = true;
+ }
+ } finally {
+ synchronized(ow) {
+ ow.success = success;
+ ow.done = true;
+ ow.notifyAll();
+ }
+ }
+ }
+
+ }, NativeThread.HIGH_PRIORITY, false);
+
+ synchronized(ow) {
+ while(true) {
+ if(ow.done) return ow.success;
+ try {
+ ow.wait();
+ } catch (InterruptedException e) {
+ // Ignore
+ }
+ }
+ }
+ }
+ }
+
+
+
public FetchResult getCompletedRequestBlocking(final FreenetURI key) {
ClientGet get = globalRebootClient.getCompletedRequest(key,
null);
if(get != null) {