From 97a914a99cc05d4d95a66d155ed1e45964095ca7 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 2 Sep 2011 11:32:40 +0000 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=B9=B6=E5=8F=91=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=BF=9E=E6=8E=A5=E8=BE=BE=E4=B8=8D=E5=88=B0maxActive?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= 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@562 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../java/com/alibaba/druid/pool/DruidDataSource.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 565234dbfb..98c86416a6 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -85,7 +85,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat // store private ConnectionHolder[] connections; - private int poolingCount = 0; + private volatile int poolingCount = 0; private int activeCount = 0; // threads @@ -532,9 +532,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat connections[lastIndex] = null; poolingCount--; - // if (count <= minIdle - 1) { - // lowWater.signal(); - // } + if ((minIdle == 0 && poolingCount == 0) || poolingCount <= minIdle - 1) { + lowWater.signal(); + } // if (count == 0) { // lowWater.signal(); // } @@ -580,7 +580,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat // if (lastIndex == minIdle - 1) { // lowWater.signal(); // } - if (poolingCount == 0) { + if ((minIdle == 0 && poolingCount == 0) || poolingCount <= minIdle - 1) { lowWater.signal(); } @@ -645,10 +645,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat // not wait } else if (poolingCount >= minIdle) { lowWater.await(); + continue; } // 防止创建超过maxActive数量的连接 if (activeCount >= maxActive) { + lowWater.await(); continue; }