From 69864a95cbd77e8d852aac4acd885cadcca200d4 Mon Sep 17 00:00:00 2001 From: Oleg Kalnichevski Date: Sat, 13 Sep 2025 22:14:51 +0200 Subject: [PATCH] HTTPCLIENT-2391: improved GRACEGUL shutdown of ExecutorService used internally by async clients --- .../impl/async/AbstractHttpAsyncClientBase.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java index 264faa2c70..9890f7712a 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java @@ -29,6 +29,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import org.apache.hc.core5.function.Supplier; @@ -116,7 +117,18 @@ public final void close(final CloseMode closeMode) { } ioReactor.initiateShutdown(); ioReactor.close(closeMode); - executorService.shutdownNow(); + if (closeMode == CloseMode.GRACEFUL) { + executorService.shutdown(); + try { + if (!executorService.awaitTermination(1, TimeUnit.SECONDS)) { + executorService.shutdownNow(); + } + } catch (final InterruptedException ignore) { + Thread.currentThread().interrupt(); + } + } else { + executorService.shutdownNow(); + } internalClose(closeMode); }