From 48a23e66bb0637c71a4b5ae2e1322612aa7064f8 Mon Sep 17 00:00:00 2001 From: "biliang.wbl" Date: Thu, 16 Mar 2017 22:20:27 +0800 Subject: [PATCH] fixed --- .../java/com/alibaba/druid/pool/DruidDataSource.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 555c2f2241..6c5323945e 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -36,7 +36,6 @@ import java.util.ServiceLoader; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -1422,7 +1421,15 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat boolean result; final long lastActiveTimeMillis = System.currentTimeMillis(); - lock.lockInterruptibly(); + lock.lock(); +// ====== begin ======= +// lockInterruptibly的实现有如下问题: +// 会导致当前线程被Interrupt时,holder无法正常被回收 +// 因此改成 lock.lock(); +// comment by wubiliang(未立) +// 原来的代码是 +// lock.lockInterruptibly(); +// ====== end ======= try { activeCount--; closeCount++;