From f6bba948f17a8bceaf33937d35f12cfa1daf3afd Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 30 Nov 2017 20:27:36 +0800 Subject: [PATCH] recycle add physicalConnection closed check. --- .../alibaba/druid/pool/DruidDataSource.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) 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++;