From 59a58ea310e69f505a4a22913535c2e6f9f3ac2c Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 22 Apr 2015 14:48:59 +0000
Subject: [PATCH] NTCP: Reduce min send finisher threads to 1

---
 .../net/i2p/router/transport/ntcp/NTCPSendFinisher.java   | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java
index d8441cbe70..1431b110fa 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPSendFinisher.java
@@ -6,6 +6,7 @@ import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import net.i2p.I2PAppContext;
 import net.i2p.router.OutNetMessage;
@@ -30,7 +31,7 @@ class NTCPSendFinisher {
     private final I2PAppContext _context;
     private final NTCPTransport _transport;
     private final Log _log;
-    private static int _count;
+    private static final AtomicInteger _count = new AtomicInteger();
     private ThreadPoolExecutor _executor;
     private static final int THREADS;
     static {
@@ -46,7 +47,6 @@ class NTCPSendFinisher {
     }
     
     public synchronized void start() {
-        _count = 0;
         _executor = new CustomThreadPoolExecutor(THREADS);
     }
 
@@ -68,7 +68,7 @@ class NTCPSendFinisher {
     private static class CustomThreadPoolExecutor extends ThreadPoolExecutor {
         public CustomThreadPoolExecutor(int num) {
              // use unbounded queue, so maximumPoolSize and keepAliveTime have no effect
-             super(num, num, 1000, TimeUnit.MILLISECONDS,
+             super(MIN_THREADS, num, 10*1000, TimeUnit.MILLISECONDS,
                    new LinkedBlockingQueue<Runnable>(), new CustomThreadFactory());
         }
     }
@@ -76,7 +76,7 @@ class NTCPSendFinisher {
     private static class CustomThreadFactory implements ThreadFactory {
         public Thread newThread(Runnable r) {
             Thread rv = Executors.defaultThreadFactory().newThread(r);
-            rv.setName("NTCPSendFinisher " + (++_count) + '/' + THREADS);
+            rv.setName("NTCPSendFinisher " + _count.incrementAndGet() + '/' + THREADS);
             rv.setDaemon(true);
             return rv;
         }
-- 
GitLab