diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index df3c2ba6..e09fecbb 100644 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -251,15 +251,17 @@ public class HikariPool implements HikariPoolMBean, IBagStateListener final ExecutorService assassinExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection assassin", configuration.getThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); - final long start = System.nanoTime(); - do { - softEvictConnections(); - abortActiveConnections(assassinExecutor); + try { + final long start = System.nanoTime(); + do { + softEvictConnections(); + abortActiveConnections(assassinExecutor); + } + while (getTotalConnections() > 0 && elapsedTimeNano(start) < TimeUnit.SECONDS.toNanos(5)); + } finally { + assassinExecutor.shutdown(); + assassinExecutor.awaitTermination(5L, TimeUnit.SECONDS); } - while (getTotalConnections() > 0 && elapsedTimeNano(start) < TimeUnit.SECONDS.toNanos(5)); - - assassinExecutor.shutdown(); - assassinExecutor.awaitTermination(5L, TimeUnit.SECONDS); closeConnectionExecutor.shutdown(); closeConnectionExecutor.awaitTermination(5L, TimeUnit.SECONDS); }