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) {


Reply via email to