Author: toad
Date: 2008-06-21 17:28:46 +0000 (Sat, 21 Jun 2008)
New Revision: 20596
Modified:
branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
branches/db4o/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java
branches/db4o/freenet/src/freenet/node/fcp/WatchGlobal.java
Log:
Create the foreverClient when we need it, if we are on the database thread.
Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
2008-06-21 17:09:10 UTC (rev 20595)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
2008-06-21 17:28:46 UTC (rev 20596)
@@ -92,7 +92,8 @@
if(global) {
client = persistenceType == PERSIST_FOREVER ?
handler.server.globalForeverClient : handler.server.globalRebootClient;
} else {
- client = persistenceType == PERSIST_FOREVER ?
handler.getForeverClient() : handler.getRebootClient();
+
assert(!handler.server.core.clientDatabaseExecutor.onThread());
+ client = persistenceType == PERSIST_FOREVER ?
handler.getForeverClient(null) : handler.getRebootClient();
}
this.startupTime = System.currentTimeMillis();
}
Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2008-06-21 17:09:10 UTC (rev 20595)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2008-06-21 17:28:46 UTC (rev 20596)
@@ -177,12 +177,7 @@
public void run(ObjectContainer container,
ClientContext context) {
try {
- FCPClient client =
server.registerForeverClient(name, server.core, FCPConnectionHandler.this,
container);
- synchronized(FCPConnectionHandler.this)
{
- foreverClient = client;
-
FCPConnectionHandler.this.notifyAll();
- }
-
client.queuePendingMessagesOnConnectionRestart(outputHandler, container);
+ createForeverClient(name, container);
} catch (Throwable t) {
Logger.error(this, "Caught "+t+"
creating persistent client for "+name, t);
failedGetForever = true;
@@ -198,6 +193,19 @@
Logger.minor(this, "Set client name: "+name);
}
+ protected FCPClient createForeverClient(String name, ObjectContainer
container) {
+ synchronized(FCPConnectionHandler.this) {
+ if(foreverClient != null) return foreverClient;
+ }
+ FCPClient client = server.registerForeverClient(name,
server.core, FCPConnectionHandler.this, container);
+ synchronized(FCPConnectionHandler.this) {
+ foreverClient = client;
+ FCPConnectionHandler.this.notifyAll();
+ }
+ client.queuePendingMessagesOnConnectionRestart(outputHandler,
container);
+ return foreverClient;
+ }
+
public String getClientName() {
return clientName;
}
@@ -395,16 +403,22 @@
return rebootClient;
}
- public FCPClient getForeverClient() {
+ public FCPClient getForeverClient(ObjectContainer container) {
synchronized(this) {
- while(foreverClient == null && (!failedGetForever) &&
(!isClosed)) {
- try {
- wait();
- } catch (InterruptedException e) {
- // Ignore
+ if(foreverClient != null)
+ return foreverClient;
+ if(container == null) {
+ while(foreverClient == null &&
(!failedGetForever) && (!isClosed)) {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ // Ignore
+ }
}
+ return foreverClient;
+ } else {
+ return createForeverClient(clientName,
container);
}
- return foreverClient;
}
}
@@ -580,7 +594,7 @@
if(global)
return
handler.server.globalForeverClient.getRequest(identifier, container);
else
- return
handler.getForeverClient().getRequest(identifier, container);
+ return
handler.getForeverClient(container).getRequest(identifier, container);
}
ClientRequest removePersistentRebootRequest(boolean global, String
identifier) throws MessageInvalidException {
@@ -597,7 +611,7 @@
ClientRequest removePersistentForeverRequest(boolean global, String
identifier, ObjectContainer container) throws MessageInvalidException {
FCPClient client =
global ? server.globalForeverClient :
- getForeverClient();
+ getForeverClient(container);
ClientRequest req = client.getRequest(identifier, container);
if(req != null) {
client.removeByIdentifier(identifier, true, server,
container);
Modified:
branches/db4o/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java
===================================================================
---
branches/db4o/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java
2008-06-21 17:09:10 UTC (rev 20595)
+++
branches/db4o/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java
2008-06-21 17:28:46 UTC (rev 20596)
@@ -43,7 +43,7 @@
node.clientCore.clientContext.jobRunner.queue(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
- FCPClient foreverClient =
handler.getForeverClient();
+ FCPClient foreverClient =
handler.getForeverClient(container);
foreverClient.queuePendingMessagesOnConnectionRestart(handler.outputHandler,
container);
foreverClient.queuePendingMessagesFromRunningRequests(handler.outputHandler,
container);
if(handler.getRebootClient().watchGlobal) {
Modified: branches/db4o/freenet/src/freenet/node/fcp/WatchGlobal.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/WatchGlobal.java 2008-06-21
17:09:10 UTC (rev 20595)
+++ branches/db4o/freenet/src/freenet/node/fcp/WatchGlobal.java 2008-06-21
17:28:46 UTC (rev 20596)
@@ -48,7 +48,7 @@
handler.server.core.clientContext.jobRunner.queue(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
-
handler.getForeverClient().setWatchGlobal(enabled, verbosityMask,
handler.server, container);
+
handler.getForeverClient(container).setWatchGlobal(enabled, verbosityMask,
handler.server, container);
}
}, NativeThread.NORM_PRIORITY, false);