diff --git a/apps/BOB/src/net/i2p/BOB/BOB.java b/apps/BOB/src/net/i2p/BOB/BOB.java index c4ef3b23a297ee3e547d3c83fa4c5ac6dac638e2..e1106c9bbb50619dfdb41bafe936519d4022a729 100644 --- a/apps/BOB/src/net/i2p/BOB/BOB.java +++ b/apps/BOB/src/net/i2p/BOB/BOB.java @@ -338,7 +338,7 @@ public class BOB implements Runnable, ClientApp { if (g) { DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log); - Thread t = new Thread(conn_c); + Thread t = new I2PAppThread(conn_c); t.setName("BOB.DoCMDS " + i); t.start(); i++; diff --git a/apps/BOB/src/net/i2p/BOB/DoCMDS.java b/apps/BOB/src/net/i2p/BOB/DoCMDS.java index 957f0ea3f1e4aa85ab4fa48388bd607058b4bfe5..7e5bd101478c13e8dae5fe1f29605ef320f17073 100644 --- a/apps/BOB/src/net/i2p/BOB/DoCMDS.java +++ b/apps/BOB/src/net/i2p/BOB/DoCMDS.java @@ -25,12 +25,13 @@ import java.util.Locale; import java.util.Properties; import java.util.StringTokenizer; import java.util.concurrent.atomic.AtomicBoolean; + import net.i2p.I2PAppContext; import net.i2p.I2PException; import net.i2p.client.I2PClientFactory; -//import net.i2p.data.DataFormatException; import net.i2p.data.Destination; -//import net.i2p.i2ptunnel.I2PTunnel; +import net.i2p.util.I2PAppThread; + // needed only for debugging. // import java.util.logging.Level; // import java.util.logging.Logger; @@ -1307,7 +1308,7 @@ public class DoCMDS implements Runnable { // wait } tunnel = new MUXlisten(lock, database, nickinfo, _log); - Thread t = new Thread(tunnel); + Thread t = new I2PAppThread(tunnel); t.start(); // try { // Thread.sleep(1000 * 10); // Slow down the startup. diff --git a/apps/BOB/src/net/i2p/BOB/I2Plistener.java b/apps/BOB/src/net/i2p/BOB/I2Plistener.java index f862c7caefe4da322f8a2ee5d4d6211f6c6155b3..ebe4888602c6cb26f7f320429b487733c9b58ae5 100644 --- a/apps/BOB/src/net/i2p/BOB/I2Plistener.java +++ b/apps/BOB/src/net/i2p/BOB/I2Plistener.java @@ -18,10 +18,12 @@ package net.i2p.BOB; import java.net.ConnectException; import java.net.SocketTimeoutException; import java.util.concurrent.atomic.AtomicBoolean; + import net.i2p.I2PException; import net.i2p.client.streaming.I2PServerSocket; import net.i2p.client.streaming.I2PSocket; import net.i2p.client.streaming.I2PSocketManager; +import net.i2p.util.I2PAppThread; /** * Listen on I2P and connect to TCP @@ -77,7 +79,7 @@ public class I2Plistener implements Runnable { conn++; // toss the connection to a new thread. I2PtoTCP conn_c = new I2PtoTCP(sessSocket, info, database, lives); - Thread t = new Thread(conn_c, Thread.currentThread().getName() + " I2PtoTCP " + conn); + Thread t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " I2PtoTCP " + conn); t.start(); } diff --git a/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java b/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java index bf699db60e62587e84c8878474a3c788e45c3dbf..8e1cebb735b701060ae4b5814c0a5b0e8eb923dc 100644 --- a/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java +++ b/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java @@ -19,7 +19,9 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.concurrent.atomic.AtomicBoolean; + import net.i2p.client.streaming.I2PSocket; +import net.i2p.util.I2PAppThread; /** * Process I2P->TCP @@ -111,8 +113,8 @@ public class I2PtoTCP implements Runnable { // setup to cross the streams TCPio conn_c = new TCPio(in, Iout, lives); // app -> I2P TCPio conn_a = new TCPio(Iin, out, lives); // I2P -> app - t = new Thread(conn_c, Thread.currentThread().getName() + " TCPioA"); - q = new Thread(conn_a, Thread.currentThread().getName() + " TCPioB"); + t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " TCPioA"); + q = new I2PAppThread(conn_a, Thread.currentThread().getName() + " TCPioB"); // Fire! t.start(); q.start(); diff --git a/apps/BOB/src/net/i2p/BOB/MUXlisten.java b/apps/BOB/src/net/i2p/BOB/MUXlisten.java index f330be971d88dbe23dc5030f97846bc406ba0bc1..81dbe0845100af617546f17631cf58dc55b2debe 100644 --- a/apps/BOB/src/net/i2p/BOB/MUXlisten.java +++ b/apps/BOB/src/net/i2p/BOB/MUXlisten.java @@ -21,11 +21,13 @@ import java.net.InetAddress; import java.net.ServerSocket; import java.util.Properties; import java.util.concurrent.atomic.AtomicBoolean; + import net.i2p.I2PException; import net.i2p.client.I2PClient; import net.i2p.client.streaming.I2PServerSocket; import net.i2p.client.streaming.I2PSocketManager; import net.i2p.client.streaming.I2PSocketManagerFactory; +import net.i2p.util.I2PAppThread; import net.i2p.util.Log; /** @@ -201,14 +203,14 @@ public class MUXlisten implements Runnable { // I2P -> TCP SS = socketManager.getServerSocket(); I2Plistener conn = new I2Plistener(SS, socketManager, info, database, _log, lives); - t = new Thread(tg, conn, "BOBI2Plistener " + N); + t = new I2PAppThread(tg, conn, "BOBI2Plistener " + N); t.start(); } if (come_in) { // TCP -> I2P TCPlistener conn = new TCPlistener(listener, socketManager, info, database, _log, lives); - q = new Thread(tg, conn, "BOBTCPlistener " + N); + q = new I2PAppThread(tg, conn, "BOBTCPlistener " + N); q.start(); } diff --git a/apps/BOB/src/net/i2p/BOB/TCPlistener.java b/apps/BOB/src/net/i2p/BOB/TCPlistener.java index 70ff52b14895a9bcca8cdb49190d5d725b916c4a..2ad1b5af616457b7d0d3e066f41b4e454d40b1ea 100644 --- a/apps/BOB/src/net/i2p/BOB/TCPlistener.java +++ b/apps/BOB/src/net/i2p/BOB/TCPlistener.java @@ -20,8 +20,10 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; import java.util.concurrent.atomic.AtomicBoolean; + import net.i2p.client.streaming.I2PServerSocket; import net.i2p.client.streaming.I2PSocketManager; +import net.i2p.util.I2PAppThread; /** * Listen on TCP port and connect to I2P @@ -75,7 +77,7 @@ public class TCPlistener implements Runnable { conn++; // toss the connection to a new thread. TCPtoI2P conn_c = new TCPtoI2P(socketManager, server, info, database, lives); - Thread t = new Thread(conn_c, Thread.currentThread().getName() + " TCPtoI2P " + conn); + Thread t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " TCPtoI2P " + conn); t.start(); g = false; } diff --git a/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java b/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java index 0ce587257d2c2ac6440560d7987f0c5b7bfeb942..3f196af28dad6441fa874ab8710b82a5676be294 100644 --- a/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java +++ b/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java @@ -24,13 +24,14 @@ import java.net.NoRouteToHostException; import java.net.Socket; import java.util.Locale; import java.util.concurrent.atomic.AtomicBoolean; + +import net.i2p.I2PAppContext; import net.i2p.I2PException; import net.i2p.client.streaming.I2PSocket; import net.i2p.client.streaming.I2PSocketManager; import net.i2p.data.DataFormatException; import net.i2p.data.Destination; -//import net.i2p.i2ptunnel.I2PTunnel; -import net.i2p.I2PAppContext; +import net.i2p.util.I2PAppThread; /** * @@ -158,8 +159,8 @@ public class TCPtoI2P implements Runnable { // setup to cross the streams TCPio conn_c = new TCPio(in, Iout, lives); // app -> I2P TCPio conn_a = new TCPio(Iin, out, lives); // I2P -> app - t = new Thread(conn_c, Thread.currentThread().getName() + " TCPioA"); - q = new Thread(conn_a, Thread.currentThread().getName() + " TCPioB"); + t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " TCPioA"); + q = new I2PAppThread(conn_a, Thread.currentThread().getName() + " TCPioB"); // Fire! t.start(); q.start(); diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java index fe9561cedbc4fca9edcb31dc4d6ec77753705441..7770d4075e251436712742e20721df201e535ad8 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java +++ b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java @@ -119,10 +119,10 @@ class SAMv3StreamSession extends SAMStreamSession implements SAMv3Handler.Sessi WritableByteChannel toI2P = Channels.newChannel(i2ps.getOutputStream()); SAMBridge bridge = handler.getBridge(); - (new Thread(rec.getThreadGroup(), + (new I2PAppThread(rec.getThreadGroup(), new Pipe(fromClient, toI2P, bridge), "ConnectV3 SAMPipeClientToI2P")).start(); - (new Thread(rec.getThreadGroup(), + (new I2PAppThread(rec.getThreadGroup(), new Pipe(fromI2P, toClient, bridge), "ConnectV3 SAMPipeI2PToClient")).start(); } @@ -176,10 +176,10 @@ class SAMv3StreamSession extends SAMStreamSession implements SAMv3Handler.Sessi WritableByteChannel toI2P = Channels.newChannel(i2ps.getOutputStream()); SAMBridge bridge = handler.getBridge(); - (new Thread(rec.getThreadGroup(), + (new I2PAppThread(rec.getThreadGroup(), new Pipe(fromClient, toI2P, bridge), "AcceptV3 SAMPipeClientToI2P")).start(); - (new Thread(rec.getThreadGroup(), + (new I2PAppThread(rec.getThreadGroup(), new Pipe(fromI2P, toClient, bridge), "AcceptV3 SAMPipeI2PToClient")).start(); } @@ -219,7 +219,7 @@ class SAMv3StreamSession extends SAMStreamSession implements SAMv3Handler.Sessi } SocketForwarder forwarder = new SocketForwarder(host, port, this, verbose); - (new Thread(rec.getThreadGroup(), forwarder, "SAMV3StreamForwarder")).start(); + (new I2PAppThread(rec.getThreadGroup(), forwarder, "SAMV3StreamForwarder")).start(); } private static class SocketForwarder implements Runnable diff --git a/core/java/src/net/i2p/util/I2PAppThread.java b/core/java/src/net/i2p/util/I2PAppThread.java index da291d210431c9eb68710deb97f6f48774510b52..c3de5c87acb5650b57d0b486b85509af3b251d4f 100644 --- a/core/java/src/net/i2p/util/I2PAppThread.java +++ b/core/java/src/net/i2p/util/I2PAppThread.java @@ -38,9 +38,17 @@ public class I2PAppThread extends I2PThread { public I2PAppThread(Runnable r, String name) { super(r, name); } + public I2PAppThread(Runnable r, String name, boolean isDaemon) { super(r, name, isDaemon); } + + /** + * @since 0.9.23 + */ + public I2PAppThread(ThreadGroup group, Runnable r, String name) { + super(group, r, name); + } @Override protected void fireOOM(OutOfMemoryError oom) { diff --git a/core/java/src/net/i2p/util/I2PThread.java b/core/java/src/net/i2p/util/I2PThread.java index 22611ee3f17e41f29bb6c09b52ac33800f8ef689..97041f4ee251cefa8f78c2fd7f125224faa1cbe3 100644 --- a/core/java/src/net/i2p/util/I2PThread.java +++ b/core/java/src/net/i2p/util/I2PThread.java @@ -73,6 +73,14 @@ public class I2PThread extends Thread { // _createdBy = new Exception("Created by"); } + /** + * @since 0.9.23 + */ + public I2PThread(ThreadGroup group, Runnable r, String name) { + super(group, r, name); + setPriority(NORM_PRIORITY); + } + /**** private void log(int level, String msg) { log(level, msg, null); } diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index 260115d454b873149320131732d9a4b19621e7c5..426da4a757cc9796c47ab2a1d439bfa2292e7f28 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -1141,7 +1141,7 @@ public class Router implements RouterClock.ClockShiftListener { _log.warn("Running shutdown task " + task.getClass()); try { //task.run(); - Thread t = new Thread(task, "Shutdown task " + task.getClass().getName()); + Thread t = new I2PAppThread(task, "Shutdown task " + task.getClass().getName()); t.setDaemon(true); t.start(); try { @@ -1454,7 +1454,7 @@ public class Router implements RouterClock.ClockShiftListener { ((RouterClock) _context.clock()).removeShiftListener(this); // Let's not stop accepting tunnels, etc //_started = _context.clock().now(); - Thread t = new Thread(new Restarter(_context), "Router Restart"); + Thread t = new I2PThread(new Restarter(_context), "Router Restart"); t.setPriority(Thread.NORM_PRIORITY + 1); t.start(); } diff --git a/router/java/src/net/i2p/router/peermanager/PeerManager.java b/router/java/src/net/i2p/router/peermanager/PeerManager.java index 8061a251775c3bddfaf66c59ac4ae772b93d396d..b3cc3643b029881c435b6239de036407b15525c9 100644 --- a/router/java/src/net/i2p/router/peermanager/PeerManager.java +++ b/router/java/src/net/i2p/router/peermanager/PeerManager.java @@ -165,7 +165,7 @@ class PeerManager { * @since 0.8.8 */ private void loadProfilesInBackground() { - (new Thread(new ProfileLoader())).start(); + (new I2PThread(new ProfileLoader())).start(); } /** diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java index baec7ab6215d34a3e48846fa202b2e034333afb6..26c7610b5f41c26e4062de8a2e9c83ff205aa95a 100644 --- a/router/java/src/net/i2p/router/transport/UPnP.java +++ b/router/java/src/net/i2p/router/transport/UPnP.java @@ -19,6 +19,7 @@ import java.util.concurrent.atomic.AtomicInteger; import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; import net.i2p.util.Addresses; +import net.i2p.util.I2PThread; import net.i2p.util.Log; import net.i2p.util.Translate; @@ -994,7 +995,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { } if (_log.shouldLog(Log.INFO)) _log.info("Starting thread to forward " + portsToForwardNow.size() + " ports"); - Thread t = new Thread(new RegisterPortsThread(portsToForwardNow)); + Thread t = new I2PThread(new RegisterPortsThread(portsToForwardNow)); t.setName("UPnP Port Opener " + __id.incrementAndGet()); t.setDaemon(true); t.start(); @@ -1034,7 +1035,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { private void unregisterPorts(Set<ForwardPort> portsToForwardNow) { if (_log.shouldLog(Log.INFO)) _log.info("Starting thread to un-forward " + portsToForwardNow.size() + " ports"); - Thread t = new Thread(new UnregisterPortsThread(portsToForwardNow)); + Thread t = new I2PThread(new UnregisterPortsThread(portsToForwardNow)); t.setName("UPnP Port Closer " + __id.incrementAndGet()); t.setDaemon(true); t.start();