From c37cc7ad52c3da330249013e8687ea7bd6702a00 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sat, 31 Oct 2015 19:13:57 +0000
Subject: [PATCH] Convert remaining Threads to I2PThread or I2PAppThread

---
 apps/BOB/src/net/i2p/BOB/BOB.java                      |  2 +-
 apps/BOB/src/net/i2p/BOB/DoCMDS.java                   |  7 ++++---
 apps/BOB/src/net/i2p/BOB/I2Plistener.java              |  4 +++-
 apps/BOB/src/net/i2p/BOB/I2PtoTCP.java                 |  6 ++++--
 apps/BOB/src/net/i2p/BOB/MUXlisten.java                |  6 ++++--
 apps/BOB/src/net/i2p/BOB/TCPlistener.java              |  4 +++-
 apps/BOB/src/net/i2p/BOB/TCPtoI2P.java                 |  9 +++++----
 apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java  | 10 +++++-----
 core/java/src/net/i2p/util/I2PAppThread.java           |  8 ++++++++
 core/java/src/net/i2p/util/I2PThread.java              |  8 ++++++++
 router/java/src/net/i2p/router/Router.java             |  4 ++--
 .../src/net/i2p/router/peermanager/PeerManager.java    |  2 +-
 router/java/src/net/i2p/router/transport/UPnP.java     |  5 +++--
 13 files changed, 51 insertions(+), 24 deletions(-)

diff --git a/apps/BOB/src/net/i2p/BOB/BOB.java b/apps/BOB/src/net/i2p/BOB/BOB.java
index c4ef3b23a2..e1106c9bbb 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 957f0ea3f1..7e5bd10147 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 f862c7caef..ebe4888602 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 bf699db60e..8e1cebb735 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 f330be971d..81dbe08451 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 70ff52b148..2ad1b5af61 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 0ce587257d..3f196af28d 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 fe9561cedb..7770d4075e 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 da291d2104..c3de5c87ac 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 22611ee3f1..97041f4ee2 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 260115d454..426da4a757 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 8061a25177..b3cc3643b0 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 baec7ab621..26c7610b5f 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();
-- 
GitLab