From 7485e2dd8b7ef8d151f9815b95791c6f0be3e1fe Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Tue, 18 Nov 2014 21:04:19 +0900 Subject: [PATCH] Fix #199 fix possible race, while avoiding heavy weight synchronisation --- .../java/com/zaxxer/hikari/util/PoolUtilities.java | 10 ++++++---- .../java/com/zaxxer/hikari/util/PoolUtilities.java | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java index 71293931..974d2d4c 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java @@ -234,8 +234,6 @@ public final class PoolUtilities public static boolean isJdbc40Compliant(final Connection connection) throws SQLException { if (!jdbc40checked) { - jdbc40checked = true; - try { connection.isValid(5); // This will throw AbstractMethodError or SQLException in the case of a non-JDBC 41 compliant driver IS_JDBC40 = true; @@ -249,6 +247,9 @@ public final class PoolUtilities catch (NoSuchMethodError e) { IS_JDBC40 = false; } + finally { + jdbc40checked = true; + } } return IS_JDBC40; @@ -293,8 +294,6 @@ public final class PoolUtilities public static int setNetworkTimeout(final Executor executor, final Connection connection, final long timeoutMs, final boolean isUseNetworkTimeout) throws SQLException { if ((IS_JDBC41 || !jdbc41checked) && isUseNetworkTimeout) { - jdbc41checked = true; - try { final int networkTimeout = connection.getNetworkTimeout(); connection.setNetworkTimeout(executor, (int) timeoutMs); @@ -310,6 +309,9 @@ public final class PoolUtilities catch (NoSuchMethodError e) { IS_JDBC41 = false; } + finally { + jdbc41checked = true; + } } return 0; diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java b/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java index 32d79f06..6a6c81fc 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java @@ -216,8 +216,6 @@ public final class PoolUtilities public static boolean isJdbc40Compliant(final Connection connection) throws SQLException { if (!jdbc40checked) { - jdbc40checked = true; - try { connection.isValid(5); // This will throw AbstractMethodError or SQLException in the case of a non-JDBC 41 compliant driver IS_JDBC40 = true; @@ -225,6 +223,9 @@ public final class PoolUtilities catch (NoSuchMethodError | AbstractMethodError | SQLFeatureNotSupportedException e) { IS_JDBC40 = false; } + finally { + jdbc40checked = true; + } } return IS_JDBC40; @@ -263,8 +264,6 @@ public final class PoolUtilities public static int setNetworkTimeout(final Executor executor, final Connection connection, final long timeoutMs, final boolean isUseNetworkTimeout) throws SQLException { if ((IS_JDBC41 || !jdbc41checked) && isUseNetworkTimeout) { - jdbc41checked = true; - try { final int networkTimeout = connection.getNetworkTimeout(); connection.setNetworkTimeout(executor, (int) timeoutMs); @@ -274,6 +273,9 @@ public final class PoolUtilities catch (SQLFeatureNotSupportedException | AbstractMethodError | NoSuchMethodError e) { IS_JDBC41 = false; } + finally { + jdbc41checked = true; + } } return 0;