From 7941b58510ae656fa62a260fb98c988253877a56 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 4 Sep 2011 11:09:47 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8lockInterruptibly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@626 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index a958ba0b1e..5801f61968 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -384,7 +384,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat try { // 第一步,检查连接是否关闭 if (conn == null || conn.isClosed()) { - lock.lock(); + lock.lockInterruptibly(); try { activeCount--; closeCount++; @@ -411,7 +411,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (isTestOnReturn()) { boolean validate = testConnectionInternal(conn); if (!validate) { - lock.lock(); + lock.lockInterruptibly(); try { JdbcUtils.close(conn); destroyCount++; @@ -425,7 +425,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat holder.setLastCheckTimeMillis(System.currentTimeMillis()); } - lock.lock(); + lock.lockInterruptibly(); try { activeCount--; closeCount++; @@ -439,7 +439,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } catch (Throwable e) { JdbcUtils.close(conn); - lock.lock(); + try { + lock.lockInterruptibly(); + } catch (InterruptedException interruptEx) { + throw new SQLException("interrupt", interruptEx); + } + try { activeCount--; closeCount++; @@ -485,8 +490,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat createConnectionCount++; } - void decrementActiveCountWithLock() { - lock.lock(); + void decrementActiveCountWithLock() throws SQLException { + try { + lock.lockInterruptibly(); + } catch (InterruptedException e) { + throw new SQLException("interrupt", e); + } + try { activeCount--; } finally {