From d6a9cd435c12af2379943c123e7ff973bc2f58b1 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Sun, 1 Oct 2017 12:30:14 +0900 Subject: [PATCH] Fixes #983 fix logic that determines how many idle connections can be removed, without violating the minimumIdle contract. --- src/main/java/com/zaxxer/hikari/pool/HikariPool.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index a1a12349..833e9c4b 100755 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -696,13 +696,11 @@ public final class HikariPool extends PoolBase implements HikariPoolMXBean, IBag afterPrefix = "After cleanup "; final List notInUse = connectionBag.values(STATE_NOT_IN_USE); - int removed = 0; + int toRemove = notInUse.size() - config.getMinimumIdle(); for (PoolEntry entry : notInUse) { - if (elapsedMillis(entry.lastAccessed, now) > idleTimeout && connectionBag.reserve(entry)) { + if (toRemove > 0 && elapsedMillis(entry.lastAccessed, now) > idleTimeout && connectionBag.reserve(entry)) { closeConnection(entry, "(connection has passed idleTimeout)"); - if (++removed > config.getMinimumIdle()) { - break; - } + toRemove--; } } }