From e32362a4726b7cfeb199d5fd80bbb3607a4be68e Mon Sep 17 00:00:00 2001 From: Oleksandr Krutko Date: Wed, 22 Oct 2025 23:07:03 +0300 Subject: [PATCH 1/3] limit ReservedThread creation Signed-off-by: Oleksandr Krutko --- .../util/thread/ReservedThreadExecutor.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java index 62cb58202316..a710b885c614 100644 --- a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java +++ b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java @@ -92,9 +92,20 @@ public ReservedThreadExecutor(Executor executor, int capacity, int minSize, int _minSize = minSize < 0 ? Math.min(1, _threads.capacity()) : minSize; if (_minSize > _threads.capacity()) throw new IllegalArgumentException("minSize larger than capacity"); - _maxPending = maxPending; - if (_maxPending == 0) - throw new IllegalArgumentException("maxPending cannot be 0"); + + if (maxPending < 0) + { + _maxPending = -1; + } + else if (maxPending == 0) + { + _maxPending = reservedThreads(executor, capacity); + } + else + { + _maxPending = maxPending; + } + if (LOG.isDebugEnabled()) LOG.debug("{}", this); installBean(_executor); From c468466ba9bd3bea3c0ae7c4c44b68bd3119f43e Mon Sep 17 00:00:00 2001 From: Oleksandr Krutko Date: Mon, 27 Oct 2025 10:34:02 +0200 Subject: [PATCH 2/3] fix Javadoc and default maxPendig argument for ReservedThreadExecutor Signed-off-by: Oleksandr Krutko --- .../util/thread/ReservedThreadExecutor.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java index a710b885c614..6609402fec0e 100644 --- a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java +++ b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java @@ -74,7 +74,7 @@ public ReservedThreadExecutor(Executor executor, int capacity) */ public ReservedThreadExecutor(Executor executor, int capacity, int minSize) { - this(executor, capacity, minSize, -1); + this(executor, capacity, minSize, 0); } /** @@ -83,7 +83,7 @@ public ReservedThreadExecutor(Executor executor, int capacity, int minSize) * is calculated based on a heuristic from the number of available processors and * thread pool type. * @param minSize The minimum number of reserve Threads that the algorithm tries to maintain, or -1 for a heuristic value. - * @param maxPending The maximum number of reserved Threads to start, or -1 for no limit. + * @param maxPending The maximum number of reserved Threads to start, 0 (default) for thread pool capacity or -1 for no limit. */ public ReservedThreadExecutor(Executor executor, int capacity, int minSize, int maxPending) { @@ -92,20 +92,14 @@ public ReservedThreadExecutor(Executor executor, int capacity, int minSize, int _minSize = minSize < 0 ? Math.min(1, _threads.capacity()) : minSize; if (_minSize > _threads.capacity()) throw new IllegalArgumentException("minSize larger than capacity"); - + if (maxPending < 0) - { _maxPending = -1; - } else if (maxPending == 0) - { - _maxPending = reservedThreads(executor, capacity); - } + _maxPending = _threads.capacity(); else - { _maxPending = maxPending; - } - + if (LOG.isDebugEnabled()) LOG.debug("{}", this); installBean(_executor); From 2a35c8d17be801eda5851635d6e6d72857720d6a Mon Sep 17 00:00:00 2001 From: Oleksandr Krutko Date: Mon, 27 Oct 2025 13:59:57 +0200 Subject: [PATCH 3/3] fix startReservedThread method Signed-off-by: Oleksandr Krutko --- .../org/eclipse/jetty/util/thread/ReservedThreadExecutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java index 6609402fec0e..830c71f2ddab 100644 --- a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java +++ b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ReservedThreadExecutor.java @@ -232,7 +232,7 @@ public boolean tryExecute(Runnable task) private void startReservedThread() { - if (_maxPending > 0 && _pending.incrementAndGet() >= _maxPending) + if (_maxPending > 0 && _pending.incrementAndGet() > _maxPending) { _pending.decrementAndGet(); return;