From bb38a06af39a36576582d01a9f291242c8ce7501 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 2 Sep 2011 16:26:58 +0000 Subject: [PATCH] git-svn-id: http://code.alibabatech.com/svn/druid/trunk@587 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index c775c5a038..5f3610a6e3 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -500,8 +500,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } ConnectionHolder takeLast() throws InterruptedException { - if (activeCount >= maxActive) { - notMaxActive.await(); // signal by recycle + while (activeCount >= maxActive) { + try { + notMaxActive.await(); // signal by recycle + } catch (InterruptedException ie) { + notMaxActive.signal(); // propagate to non-interrupted thread + throw ie; + } } try { @@ -525,8 +530,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat long estimate = unit.toNanos(timeout); for (;;) { - if (activeCount >= maxActive) { - estimate = notMaxActive.awaitNanos(estimate); // signal by recycle + while (activeCount >= maxActive) { + try { + estimate = notMaxActive.awaitNanos(estimate); // signal by recycle + } catch (InterruptedException ie) { + notMaxActive.signal(); // propagate to non-interrupted thread + throw ie; + } } if (poolingCount == 0) {