This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git


The following commit(s) were added to refs/heads/master by this push:
     new 7d77e6d97 Use a singleton threadpool for kex message handler flushing 
(#459) (fixes #458)
7d77e6d97 is described below

commit 7d77e6d9795405c03b2ad4cc5a2977c5e9329660
Author: FliegenKLATSCH <ch...@koras.de>
AuthorDate: Tue Jan 30 09:31:15 2024 +0100

    Use a singleton threadpool for kex message handler flushing (#459) (fixes 
#458)
---
 .../session/helpers/KeyExchangeMessageHandler.java       | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java
 
b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java
index 4ad8db4e1..a5853e06e 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java
@@ -28,7 +28,6 @@ import java.util.Objects;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
@@ -75,18 +74,18 @@ public class KeyExchangeMessageHandler {
     // re-acquires the write lock, so normally not many readers (i.e., 
writePacket() calls) will get a chance to enqueue
     // new packets.
 
-    /**
-     * We need the flushing thread to have priority over writing threads. So 
we use a lock that favors writers over
-     * readers, and any state updates and the flushing thread are writers, 
while writePacket() is a reader.
-     */
-    protected final ReentrantReadWriteLock lock = new 
ReentrantReadWriteLock(false);
-
     /**
      * An {@link ExecutorService} used to flush the queue asynchronously.
      *
      * @see #flushQueue(DefaultKeyExchangeFuture)
      */
-    protected final ExecutorService flushRunner = 
Executors.newSingleThreadExecutor();
+    protected static ExecutorService flushRunner = 
ThreadUtils.newCachedThreadPool("kex-flusher");
+
+    /**
+     * We need the flushing thread to have priority over writing threads. So 
we use a lock that favors writers over
+     * readers, and any state updates and the flushing thread are writers, 
while writePacket() is a reader.
+     */
+    protected final ReentrantReadWriteLock lock = new 
ReentrantReadWriteLock(false);
 
     /**
      * The {@link AbstractSession} this {@link KeyExchangeMessageHandler} 
belongs to.
@@ -209,7 +208,6 @@ public class KeyExchangeMessageHandler {
                     kexFlushedFuture.get());
         });
         items.getValue().setValue(Boolean.valueOf(items.getKey().intValue() == 
0));
-        flushRunner.shutdownNow();
     }
 
     /**

Reply via email to