From 6a2bfb758c3c9a955216417653db2937a8dab3cb Mon Sep 17 00:00:00 2001 From: Nitin Date: Sat, 15 Aug 2015 10:50:17 +0530 Subject: [PATCH] for closing connection, reserve entry only when it is past idle time or evicted, not otherwise --- src/main/java/com/zaxxer/hikari/pool/HikariPool.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index e67517b2..06b57cd6 100644 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -627,21 +627,20 @@ public class HikariPool implements HikariPoolMXBean, IBagStateListener fillPool(); return; } - else { - previous = now; - } + + previous = now; logPoolState("Before cleanup\t"); final List bag = connectionBag.values(STATE_NOT_IN_USE); int removable = bag.size() - config.getMinimumIdle(); for (PoolBagEntry bagEntry : bag) { - if (removable > 0 && connectionBag.reserve(bagEntry)) { - if (idleTimeout > 0L && clockSource.elapsedMillis(bagEntry.lastAccess, now) > idleTimeout) { + if (removable > 0 && (bagEntry.evicted || (idleTimeout > 0L && clockSource.elapsedMillis(bagEntry.lastAccess, now) > idleTimeout))) { + if (connectionBag.reserve(bagEntry)) { closeConnection(bagEntry, "(connection passed idleTimeout)"); removable--; } else { - connectionBag.unreserve(bagEntry); + bagEntry.evicted = true; } } }