From 37b96f1ed93ca3cd60a121659e3acb1e73cb8522 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Wed, 21 Oct 2015 15:52:15 +0900 Subject: [PATCH] Fixes #465 fix apparent leak of one connection leak at startup when minimumIdle=0 ... the connection is not leaked, but the ProxyLeakTask was not cancelled. --- .../java/com/zaxxer/hikari/pool/HikariPool.java | 9 ++++++--- .../com/zaxxer/hikari/pool/ProxyConnection.java | 16 ++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 9216f893..896d9693 100644 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -252,11 +252,14 @@ public class HikariPool extends PoolBase implements HikariPoolMXBean, IBagStateL /** * Evict a connection from the pool. * - * @param proxyConnection the connection to evict + * @param connection the connection to evict */ - public final void evictConnection(Connection proxyConnection) + public final void evictConnection(Connection connection) { - softEvictConnection(((ProxyConnection) proxyConnection).getPoolEntry(), "(connection evicted by user)", true /* owner */); + ProxyConnection proxyConnection = (ProxyConnection) connection; + proxyConnection.cancelLeakTask(); + + softEvictConnection(proxyConnection.getPoolEntry(), "(connection evicted by user)", true /* owner */); } public void setMetricRegistry(Object metricRegistry) diff --git a/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java b/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java index b5995c48..6a6d2c4d 100644 --- a/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java +++ b/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java @@ -133,16 +133,14 @@ public abstract class ProxyConnection implements Connection } // *********************************************************************** - // IHikariConnectionProxy methods + // Internal methods // *********************************************************************** - /** {@inheritDoc} */ final PoolEntry getPoolEntry() { return poolEntry; } - /** {@inheritDoc} */ final SQLException checkException(final SQLException sqle) { final String sqlState = sqle.getSQLState(); @@ -165,13 +163,11 @@ public abstract class ProxyConnection implements Connection return sqle; } - /** {@inheritDoc} */ final void untrackStatement(final Statement statement) { openStatements.remove(statement); } - /** {@inheritDoc} */ final void markCommitStateDirty() { if (isAutoCommit) { @@ -182,9 +178,13 @@ public abstract class ProxyConnection implements Connection } } - // *********************************************************************** - // Internal methods - // *********************************************************************** + /** + * + */ + void cancelLeakTask() + { + leakTask.cancel(); + } private final T trackStatement(final T statement) {