Author: toad
Date: 2006-06-20 17:45:20 +0000 (Tue, 20 Jun 2006)
New Revision: 9316
Modified:
trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java
trunk/freenet/src/freenet/io/NetworkInterface.java
trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
trunk/freenet/src/freenet/node/CHKInsertSender.java
trunk/freenet/src/freenet/node/CPUAdjustingSwapRequestInterval.java
trunk/freenet/src/freenet/node/LoggingConfigHandler.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/NodePinger.java
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/SSKInsertSender.java
trunk/freenet/src/freenet/node/TestnetHandler.java
trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
trunk/freenet/src/freenet/node/fcp/FCPConnectionOutputHandler.java
trunk/freenet/src/freenet/node/fcp/FCPServer.java
Log:
refactor: move Thread.start() out of constructors.
also some minor synchronization and logging fixes.
Modified: trunk/freenet/src/freenet/clients/http/FProxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FProxyToadlet.java 2006-06-20
16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/clients/http/FProxyToadlet.java 2006-06-20
17:45:20 UTC (rev 9316)
@@ -373,6 +373,9 @@
QueueToadlet queueToadlet = new QueueToadlet(node,
node.getFCPServer(), client);
server.register(queueToadlet, "/queue/", true);
+ // Now start the server.
+ server.start();
+
} catch (IOException ioe) {
Logger.error(node,"Failed to start FProxy: "+ioe, ioe);
}
Modified: trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java
2006-06-20 16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java
2006-06-20 17:45:20 UTC (rev 9316)
@@ -122,13 +122,14 @@
if(val) {
// Start it
myThread = new
Thread(SimpleToadletServer.this, "SimpleToadletServer");
- myThread.setDaemon(true);
- myThread.start();
} else {
myThread.interrupt();
myThread = null;
+ return;
}
}
+ myThread.setDaemon(true);
+ myThread.start();
}
}
@@ -159,6 +160,8 @@
fproxyConfig.register("enabled", true, 1, true, "Enable
FProxy?", "Whether to enable FProxy and related HTTP services",
new FProxyEnabledCallback());
+ boolean enabled = fproxyConfig.getBoolean("enabled");
+
List themes = new ArrayList();
try {
URL url = getClass().getResource("staticfiles/themes/");
@@ -200,8 +203,6 @@
}
}
- boolean enabled = fproxyConfig.getBoolean("enabled");
-
fproxyConfig.register("port", DEFAULT_FPROXY_PORT, 2, true,
"FProxy port number", "FProxy port number",
new FProxyPortCallback());
fproxyConfig.register("bindTo", "127.0.0.1", 2, true, "IP
address to bind to", "IP address to bind to",
@@ -225,18 +226,13 @@
toadlets = new LinkedList();
node.setToadletContainer(this); // even if not enabled, because
of config
+ this.networkInterface = new NetworkInterface(port, this.bindTo,
this.allowedHosts);
if(!enabled) {
Logger.normal(node, "Not starting FProxy as it's
disabled");
System.out.println("Not starting FProxy as it's
disabled");
- this.networkInterface = null;
} else {
- this.networkInterface = new NetworkInterface(port,
this.bindTo, this.allowedHosts);
-
myThread = new Thread(this, "SimpleToadletServer");
myThread.setDaemon(true);
- myThread.start();
- Logger.normal(this, "Starting FProxy on
"+bindTo+":"+port);
- System.out.println("Starting FProxy on
"+bindTo+":"+port);
}
}
@@ -248,11 +244,16 @@
this.networkInterface = new NetworkInterface(port, this.bindTo,
this.allowedHosts);
toadlets = new LinkedList();
this.cssName = cssName;
- Thread t = new Thread(this, "SimpleToadletServer");
- t.setDaemon(true);
- t.start();
}
+ public void start() {
+ if(myThread != null) {
+ myThread.start();
+ Logger.normal(this, "Starting FProxy on
"+bindTo+":"+port);
+ System.out.println("Starting FProxy on
"+bindTo+":"+port);
+ }
+ }
+
public void register(Toadlet t, String urlPrefix, boolean atFront) {
ToadletElement te = new ToadletElement(t, urlPrefix);
if(atFront) toadlets.addFirst(te);
@@ -284,6 +285,7 @@
logger.start();
SimpleToadletServer server = new SimpleToadletServer(1111,
"127.0.0.1", "127.0.0.1", new TempBucketFactory(new FilenameGenerator(new
DummyRandomSource(), true, new File("temp-test"), "test-temp-")), "aqua");
server.register(new TrivialToadlet(null), "", true);
+ server.start();
System.out.println("Bound to port 1111.");
while(true) {
try {
@@ -307,7 +309,8 @@
try {
Socket conn = networkInterface.accept();
Logger.minor(this, "Accepted connection");
- new SocketHandler(conn);
+ SocketHandler sh = new SocketHandler(conn);
+ sh.start();
} catch (SocketTimeoutException e) {
// Go around again, this introduced to avoid
blocking forever when told to quit
}
@@ -320,11 +323,14 @@
public SocketHandler(Socket conn) {
this.sock = conn;
+ }
+
+ void start() {
Thread t = new Thread(this,
"SimpleToadletServer$SocketHandler");
t.setDaemon(true);
t.start();
}
-
+
public void run() {
Logger.minor(this, "Handling connection");
ToadletContextImpl.handle(sock,
SimpleToadletServer.this, bf);
Modified: trunk/freenet/src/freenet/io/NetworkInterface.java
===================================================================
--- trunk/freenet/src/freenet/io/NetworkInterface.java 2006-06-20 16:36:54 UTC
(rev 9315)
+++ trunk/freenet/src/freenet/io/NetworkInterface.java 2006-06-20 17:45:20 UTC
(rev 9316)
@@ -156,7 +156,9 @@
started = true;
Iterator acceptors = this.acceptors.iterator();
while (acceptors.hasNext()) {
- new Thread((Acceptor) acceptors.next(),
"Network Interface Acceptor").start();
+ Thread t = new Thread((Acceptor)
acceptors.next(), "Network Interface Acceptor");
+ t.setDaemon(true);
+ t.start();
}
}
while (acceptedSockets.size() == 0) {
Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java 2006-06-20
16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java 2006-06-20
17:45:20 UTC (rev 9316)
@@ -345,6 +345,7 @@
}
}
};
+ _senderThread.setDaemon(true);
}
public void sendAborted(int reason, String desc) throws
NotConnectedException {
@@ -483,7 +484,7 @@
public void sendAsync() {
Runnable r = new Runnable() {
public void run() { send(); } };
- Thread t = new Thread(r, "BlockTransmitter:sendAsync()");
+ Thread t = new Thread(r, "BlockTransmitter:sendAsync() for "+this);
t.setDaemon(true);
t.start();
}
Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-06-20 16:36:54 UTC
(rev 9315)
+++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-06-20 17:45:20 UTC
(rev 9316)
@@ -42,6 +42,9 @@
AwaitingCompletion(PeerNode pn, PartiallyReceivedBlock prb) {
this.pn = pn;
bt = new BlockTransmitter(node.usm, pn, uid, prb);
+ }
+
+ void start() {
Sender s = new Sender(this);
Thread senderThread = new Thread(s, "Sender for "+uid+" to
"+pn.getPeer());
senderThread.setDaemon(true);
@@ -125,11 +128,14 @@
this.closestLocation = closestLocation;
this.startTime = System.currentTimeMillis();
this.nodesWaitingForCompletion = new Vector();
+ }
+
+ void start() {
Thread t = new Thread(this, "CHKInsertSender for UID "+uid+" on
"+node.portNumber+" at "+System.currentTimeMillis());
t.setDaemon(true);
t.start();
- }
-
+ }
+
// Constants
static final int ACCEPTED_TIMEOUT = 10000;
static final int SEARCH_TIMEOUT = 60000;
@@ -368,6 +374,7 @@
nodesWaitingForCompletion.add(ac);
nodesWaitingForCompletion.notifyAll();
}
+ ac.start();
makeCompletionWaiter();
while (true) {
@@ -584,13 +591,16 @@
return sentRequest;
}
- private synchronized void makeCompletionWaiter() {
- if(cw == null) {
- cw = new CompletionWaiter();
- Thread t = new Thread(cw, "Completion waiter for "+uid);
- t.setDaemon(true);
- t.start();
+ private void makeCompletionWaiter() {
+ synchronized(this) {
+ if(cw != null)
+ cw = new CompletionWaiter();
+ else
+ return;
}
+ Thread t = new Thread(cw, "Completion waiter for "+uid);
+ t.setDaemon(true);
+ t.start();
}
private class CompletionWaiter implements Runnable {
Modified: trunk/freenet/src/freenet/node/CPUAdjustingSwapRequestInterval.java
===================================================================
--- trunk/freenet/src/freenet/node/CPUAdjustingSwapRequestInterval.java
2006-06-20 16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/node/CPUAdjustingSwapRequestInterval.java
2006-06-20 17:45:20 UTC (rev 9316)
@@ -21,12 +21,15 @@
currentValue = initialValue;
this.targetCPUUsage = targetCPUUsage;
m = new CPUUsageMonitor();
+ }
+
+ public void start() {
Thread t = new Thread(this, "CPUAdjustingSwapRequestInterval");
t.setDaemon(true);
t.setPriority(Thread.MAX_PRIORITY);
t.start();
}
-
+
public synchronized int getValue() {
return (int)currentValue;
}
Modified: trunk/freenet/src/freenet/node/LoggingConfigHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/LoggingConfigHandler.java 2006-06-20
16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/node/LoggingConfigHandler.java 2006-06-20
17:45:20 UTC (rev 9316)
@@ -64,7 +64,7 @@
// Discard old data
fileLoggerHook.switchBaseFilename(f.getPath()+File.separator+LOG_PREFIX);
logDir = f;
- new Deleter(logDir);
+ new
Deleter(logDir).start();
}
}
});
@@ -252,11 +252,14 @@
public Deleter(File logDir) {
this.logDir = logDir;
+ }
+
+ void start() {
Thread t = new Thread(this, "Old log directory
"+logDir+" deleter");
t.setDaemon(true);
t.start();
}
-
+
public void run() {
fileLoggerHook.waitForSwitch();
delete(logDir);
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-06-20 16:36:54 UTC (rev
9315)
+++ trunk/freenet/src/freenet/node/Node.java 2006-06-20 17:45:20 UTC (rev
9316)
@@ -1199,6 +1199,7 @@
peers.writePeers();
peers.updatePMUserAlert();
nodePinger = new NodePinger(this);
+ nodePinger.start();
usm.setDispatcher(dispatcher=new NodeDispatcher(this));
usm.setLowLevelFilter(packetMangler = new
FNPPacketMangler(this));
@@ -2482,7 +2483,7 @@
* @param source The node that sent the InsertRequest, or null
* if it originated locally.
*/
- public synchronized CHKInsertSender makeInsertSender(NodeCHK key, short
htl, long uid, PeerNode source,
+ public CHKInsertSender makeInsertSender(NodeCHK key, short htl, long
uid, PeerNode source,
byte[] headers, PartiallyReceivedBlock prb, boolean
fromStore, double closestLoc, boolean cache) {
Logger.minor(this,
"makeInsertSender("+key+","+htl+","+uid+","+source+",...,"+fromStore);
KeyHTLPair kh = new KeyHTLPair(key, htl);
@@ -2497,6 +2498,7 @@
if(fromStore && !cache)
throw new IllegalArgumentException("From store = true
but cache = false !!!");
is = new CHKInsertSender(key, uid, headers, htl, source, this,
prb, fromStore, closestLoc);
+ is.start();
Logger.minor(this, is.toString()+" for "+kh.toString());
// CHKInsertSender adds itself to insertSenders
return is;
@@ -2513,7 +2515,7 @@
* @param source The node that sent the InsertRequest, or null
* if it originated locally.
*/
- public synchronized SSKInsertSender makeInsertSender(SSKBlock block,
short htl, long uid, PeerNode source,
+ public SSKInsertSender makeInsertSender(SSKBlock block, short htl, long
uid, PeerNode source,
boolean fromStore, double closestLoc, boolean cache) {
NodeSSK key = (NodeSSK) block.getKey();
if(key.getPubKey() == null) {
@@ -2533,6 +2535,7 @@
if(fromStore && !cache)
throw new IllegalArgumentException("From store = true
but cache = false !!!");
is = new SSKInsertSender(block, uid, htl, source, this,
fromStore, closestLoc);
+ is.start();
Logger.minor(this, is.toString()+" for "+kh.toString());
// SSKInsertSender adds itself to insertSenders
return is;
Modified: trunk/freenet/src/freenet/node/NodePinger.java
===================================================================
--- trunk/freenet/src/freenet/node/NodePinger.java 2006-06-20 16:36:54 UTC
(rev 9315)
+++ trunk/freenet/src/freenet/node/NodePinger.java 2006-06-20 17:45:20 UTC
(rev 9316)
@@ -20,6 +20,9 @@
this.node = n;
this.tdra = new TimeDecayingRunningAverage(0.0, 30*1000, // 30
seconds
0.0, Double.MAX_VALUE);
+ }
+
+ void start() {
Thread t = new Thread(this, "Node pinger");
t.setDaemon(true);
t.start();
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2006-06-20 16:36:54 UTC
(rev 9315)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2006-06-20 17:45:20 UTC
(rev 9316)
@@ -38,9 +38,9 @@
this.node = node;
myThread = new Thread(this, "PacketSender thread for
"+node.portNumber);
myThread.setDaemon(true);
- lastTimeInSeconds = (int) (System.currentTimeMillis() / 1000);
}
+
/**
* The main purpose of this thread is to detect the lost-lock deadlocks
that happen occasionally
* on Sun VMs with NPTL enabled, and restart the node.
@@ -95,6 +95,7 @@
void start() {
Logger.normal(this, "Starting PacketSender");
System.out.println("Starting PacketSender");
+ lastTimeInSeconds = (int) (System.currentTimeMillis() / 1000);
// Necessary because of sun JVM bugs when NPTL is enabled. Write once,
debug everywhere!
Thread t1 = new Thread(new Watchdog(), "PacketSender watchdog");
t1.setDaemon(true);
Modified: trunk/freenet/src/freenet/node/SSKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/SSKInsertSender.java 2006-06-20 16:36:54 UTC
(rev 9315)
+++ trunk/freenet/src/freenet/node/SSKInsertSender.java 2006-06-20 17:45:20 UTC
(rev 9316)
@@ -96,11 +96,14 @@
}
this.block = block;
startTime = System.currentTimeMillis();
+ }
+
+ void start() {
Thread t = new Thread(this, "SSKInsertSender for UID "+uid+" on
"+node.portNumber+" at "+System.currentTimeMillis());
t.setDaemon(true);
t.start();
}
-
+
public void run() {
short origHTL = htl;
node.addInsertSender(myKey, htl, this);
Modified: trunk/freenet/src/freenet/node/TestnetHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/TestnetHandler.java 2006-06-20 16:36:54 UTC
(rev 9315)
+++ trunk/freenet/src/freenet/node/TestnetHandler.java 2006-06-20 17:45:20 UTC
(rev 9316)
@@ -84,7 +84,7 @@
while(!server.isClosed()) {
try {
Socket s = server.accept();
- new TestnetSocketHandler(s);
+ new TestnetSocketHandler(s).start();
} catch (IOException e) {
Logger.error(this, "Testnet failed to
accept socket: "+e, e);
}
@@ -117,11 +117,14 @@
public TestnetSocketHandler(Socket s2) {
this.s = s2;
+ }
+
+ void start() {
Thread t = new Thread(this, "Testnet handler for
"+s.getInetAddress()+" at "+System.currentTimeMillis());
t.setDaemon(true);
t.start();
}
-
+
public void run() {
InputStream is = null;
OutputStream os = null;
Modified: trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
2006-06-20 16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
2006-06-20 17:45:20 UTC (rev 9316)
@@ -43,9 +43,14 @@
this.allowedHosts = allowedHosts;
this.isEnabled=true;
n.setTMCI(this);
- new Thread(this, "Text mode client interface").start();
}
+ void start() {
+ Thread t = new Thread(this, "Text mode client interface");
+ t.setDaemon(true);
+ t.start();
+ }
+
public static void maybeCreate(Node node, Config config) throws
IOException {
SubConfig TMCIConfig = new SubConfig("console", config);
@@ -67,7 +72,7 @@
boolean direct = TMCIConfig.getBoolean("directEnabled");
if(TMCIEnabled){
- new TextModeClientInterfaceServer(node, port, bind_ip,
allowedHosts);
+ new TextModeClientInterfaceServer(node, port, bind_ip,
allowedHosts).start();
Logger.normal(node, "TMCI started on
"+bind_ip+":"+port);
System.out.println("TMCI started on "+bind_ip+":"+port);
}
Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2006-06-20 16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2006-06-20 17:45:20 UTC (rev 9316)
@@ -29,9 +29,13 @@
requestsByIdentifier = new HashMap();
this.inputHandler = new FCPConnectionInputHandler(this);
this.outputHandler = new FCPConnectionOutputHandler(this);
+ }
+
+ void start() {
inputHandler.start();
+ outputHandler.start();
}
-
+
public void close() {
ClientRequest[] requests;
if(client != null)
Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionOutputHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionOutputHandler.java
2006-06-20 16:36:54 UTC (rev 9315)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionOutputHandler.java
2006-06-20 17:45:20 UTC (rev 9316)
@@ -14,11 +14,14 @@
public FCPConnectionOutputHandler(FCPConnectionHandler handler) {
this.handler = handler;
this.outQueue = new LinkedList();
+ }
+
+ void start() {
Thread t = new Thread(this, "FCP output handler for
"+handler.sock.getRemoteSocketAddress()+":"+handler.sock.getPort());
t.setDaemon(true);
t.start();
}
-
+
public void run() {
try {
realRun();
Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-06-20 16:36:54 UTC
(rev 9315)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-06-20 17:45:20 UTC
(rev 9316)
@@ -40,7 +40,7 @@
*/
public class FCPServer implements Runnable {
- final NetworkInterface networkInterface;
+ NetworkInterface networkInterface;
final Node node;
final int port;
public final boolean enabled;
@@ -82,22 +82,25 @@
this.enabled = isEnabled;
this.enablePersistentDownloads = persistentDownloadsEnabled;
setPersistentDownloadsFile(new File(persistentDownloadsDir));
+ this.node = node;
+ clientsByName = new WeakHashMap();
+
+ // This one is only used to get the default settings.
Individual FCP conns
+ // will make their own.
+ HighLevelSimpleClient client = node.makeClient((short)0);
+ defaultFetchContext = client.getFetcherContext();
+ defaultInsertContext = client.getInserterContext();
+
+
+ globalClient = new FCPClient("Global Queue", this, null, true);
+
+
+ }
+
+ public void maybeStart() throws IOException,
InvalidConfigValueException {
if (this.enabled) {
- this.node = node;
- clientsByName = new WeakHashMap();
-
- // This one is only used to get the default settings.
Individual FCP conns
- // will make their own.
- HighLevelSimpleClient client =
node.makeClient((short)0);
- defaultFetchContext = client.getFetcherContext();
- defaultInsertContext = client.getInserterContext();
-
-
- globalClient = new FCPClient("Global Queue", this,
null, true);
-
-
if(enablePersistentDownloads) {
loadPersistentRequests();
startPersister();
@@ -124,12 +127,7 @@
Logger.normal(this, "Not starting FCP server as it's
disabled");
System.out.println("Not starting FCP server as it's
disabled");
this.networkInterface = null;
- this.node = null;
- this.clientsByName = null;
- this.globalClient = null;
- this.defaultFetchContext = null;
}
-
}
public void run() {
@@ -147,7 +145,8 @@
private void realRun() throws IOException {
// Accept a connection
Socket s = networkInterface.accept();
- new FCPConnectionHandler(s, this);
+ FCPConnectionHandler ch = new FCPConnectionHandler(s, this);
+ ch.start();
}
static class FCPPortNumberCallback implements IntCallback {
@@ -317,6 +316,9 @@
fcpConfig.finishedInitialization();
+ if(fcp != null)
+ fcp.maybeStart();
+
return fcp;
}