diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 93245404e9..b5cb65152f 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -1660,6 +1660,17 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return; } + if (physicalConnection.isClosed()) { + lock.lock(); + try { + activeCount--; + closeCount++; + } finally { + lock.unlock(); + } + return; + } + if (testOnReturn) { boolean validate = testConnectionInternal(holder, physicalConnection); if (!validate) { @@ -1686,14 +1697,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat boolean result; final long lastActiveTimeMillis = System.currentTimeMillis(); lock.lock(); -// ====== begin ======= -// lockInterruptibly的实现有如下问题: -// 会导致当前线程被Interrupt时,holder无法正常被回收 -// 因此改成 lock.lock(); -// comment by wubiliang(未立) -// 原来的代码是 -// lock.lockInterruptibly(); -// ====== end ======= try { activeCount--; closeCount++;