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;
        }



Reply via email to