Author: toad
Date: 2008-06-16 16:58:30 +0000 (Mon, 16 Jun 2008)
New Revision: 20372

Modified:
   branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
   branches/db4o/freenet/src/freenet/node/fcp/RemovePersistentRequest.java
Log:
Run RemovePersistentRequest on the db thread too (if persistent)

Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java        
2008-06-16 16:51:32 UTC (rev 20371)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java        
2008-06-16 16:58:30 UTC (rev 20372)
@@ -534,20 +534,24 @@
                        return 
handler.getForeverClient().getRequest(identifier, container);
        }

-       ClientRequest removePersistentRequest(boolean global, String 
identifier) throws MessageInvalidException {
-               ClientRequest req = removePersistentRequest(global, identifier, 
true);
-               if(req == null)
-                       req = removePersistentRequest(global, identifier, 
false);
+       ClientRequest removePersistentRebootRequest(boolean global, String 
identifier) throws MessageInvalidException {
+               FCPClient client =
+                       global ? server.globalRebootClient :
+                       getRebootClient();
+               ClientRequest req = client.getRequest(identifier, null);
+               if(req != null) {
+                       client.removeByIdentifier(identifier, true, server, 
null);
+               }
                return req;
        }

-       ClientRequest removePersistentRequest(boolean global, String 
identifier, boolean rebootOnly) throws MessageInvalidException {
+       ClientRequest removePersistentForeverRequest(boolean global, String 
identifier, ObjectContainer container) throws MessageInvalidException {
                FCPClient client =
-                       global ? (rebootOnly ? server.globalRebootClient 
:server.globalForeverClient) :
-                       (rebootOnly ? getRebootClient() : getForeverClient());
-               ClientRequest req = client.getRequest(identifier);
+                       global ? server.globalForeverClient :
+                       getForeverClient();
+               ClientRequest req = client.getRequest(identifier, container);
                if(req != null) {
-                       client.removeByIdentifier(identifier, true, server);
+                       client.removeByIdentifier(identifier, true, server, 
container);
                }
                return req;
        }

Modified: 
branches/db4o/freenet/src/freenet/node/fcp/RemovePersistentRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/RemovePersistentRequest.java     
2008-06-16 16:51:32 UTC (rev 20371)
+++ branches/db4o/freenet/src/freenet/node/fcp/RemovePersistentRequest.java     
2008-06-16 16:58:30 UTC (rev 20372)
@@ -3,8 +3,13 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.node.fcp;

+import com.db4o.ObjectContainer;
+
+import freenet.client.async.ClientContext;
+import freenet.client.async.DBJob;
 import freenet.node.Node;
 import freenet.support.*;
+import freenet.support.io.NativeThread;

 /**
  * Client telling node to remove a (completed or not) persistent request.
@@ -34,14 +39,28 @@
                return NAME;
        }

-       public void run(FCPConnectionHandler handler, Node node)
+       public void run(final FCPConnectionHandler handler, Node node)
                        throws MessageInvalidException {
-               ClientRequest req = handler.removePersistentRequest(global, 
identifier);
+               ClientRequest req = 
handler.removePersistentRebootRequest(global, identifier);
                if(req == null && !global) {
                        req = handler.removeRequestByIdentifier(identifier, 
true);
                }
                if(req == null) {
-               Logger.error(this, "Huh ? the request is null!");
+                       handler.server.core.clientContext.jobRunner.queue(new 
DBJob() {
+
+                               public void run(ObjectContainer container, 
ClientContext context) {
+                                       try {
+                                               ClientRequest req = 
handler.removePersistentRebootRequest(global, identifier);
+                                               if(req == null) {
+                                               Logger.error(this, "Huh ? the 
request is null!");
+                                               }
+                                       } catch (MessageInvalidException e) {
+                                               FCPMessage err = new 
ProtocolErrorMessage(e.protocolCode, false, e.getMessage(), e.ident, e.global);
+                                               
handler.outputHandler.queue(err);
+                                       }
+                               }
+                               
+                       }, NativeThread.NORM_PRIORITY, false);
                }
        }



Reply via email to