From 764995bdd3c10a6e1b6729ae3d9b528e4622852d Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Sun, 28 Sep 2014 17:28:22 +0900 Subject: [PATCH] Fixed #147 Integrate close asynch change into java6 code. --- .../main/java/com/zaxxer/hikari/pool/HikariPool.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 36ac3059..7a50dde6 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -77,6 +77,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener private final HikariConfig configuration; private final ConcurrentBag connectionBag; private final ThreadPoolExecutor addConnectionExecutor; + private final ThreadPoolExecutor closeConnectionExecutor; private final IMetricsTracker metricsTracker; private final AtomicReference lastConnectionFailure; @@ -142,6 +143,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener } addConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection filler", configuration.getThreadFactory()); + closeConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection closer", configuration.getThreadFactory()); fillPool(); @@ -242,6 +244,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener logPoolState("Before shutdown "); houseKeepingExecutorService.shutdownNow(); addConnectionExecutor.shutdownNow(); + closeConnectionExecutor.shutdownNow(); final long start = System.currentTimeMillis(); do { @@ -376,10 +379,11 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener if (tc < 0) { LOGGER.warn("Internal accounting inconsistency, totalConnections={}", tc, new Exception()); } - bagEntry.connection.close(); - } - catch (SQLException e) { - return; + closeConnectionExecutor.submit(new Runnable() { + public void run() { + quietlyCloseConnection(bagEntry.connection); + } + }); } finally { connectionBag.remove(bagEntry);