From 00bd2098a765dd92a2e90d996269459f3af1c780 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 30 Aug 2011 04:28:43 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=BF=9E=E6=8E=A5=E6=B1=A0?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E6=AD=A3=E7=A1=AE=E8=A2=AB=E5=9B=9E=E6=94=B6?= =?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@538 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 22 +++++-------------- .../com/alibaba/druid/bvt/pool/TestIdle.java | 2 +- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 076c677ba8..b81dd36c8c 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -694,7 +694,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat initedLatch.countDown(); final List evictList = new ArrayList(); - final List idleList = new ArrayList(); FOR_0: for (;;) { // 从前面开始删除 try { @@ -727,24 +726,23 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat break; } - if (idleList.size() >= numTestsPerEvictionRun) { - break; - } ConnectionHolder connection = connections[i]; if (evictCount == 0 && idleCount == 0 && connection == null) { continue FOR_0; } + + if (count - evictList.size() <= minIdle) { + break; + } long idleMillis = System.currentTimeMillis() - connection.getLastActiveTimeMillis(); - if (idleMillis >= minEvictableIdleTimeMillis && count - evictList.size() > minIdle) { + if (idleMillis >= minEvictableIdleTimeMillis) { evictList.add(connection); - } else { - idleList.add(connection); } } - int removeCount = idleList.size() + evictList.size(); + int removeCount = evictList.size(); System.arraycopy(connections, removeCount, connections, 0, count - removeCount); Arrays.fill(connections, count - removeCount, count, null); count -= removeCount; @@ -752,13 +750,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat lock.unlock(); } - for (ConnectionHolder idleConnection : idleList) { - if (!testConnectionInternal(idleConnection.getConnection())) { - evictList.add(idleConnection); - } - } - - for (ConnectionHolder item : evictList) { Connection connection = item.getConnection(); JdbcUtils.close(connection); @@ -782,7 +773,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } - idleList.clear(); evictList.clear(); } catch (InterruptedException e) { break; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java index fcccda62fb..fc7696070e 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java @@ -59,7 +59,7 @@ public class TestIdle extends TestCase { Thread.sleep(dataSource.getMinEvictableIdleTimeMillis() * 2); Assert.assertEquals(0, driver.getConnections().size()); - Assert.assertEquals(0, dataSource.getPoolingCount()); + Assert.assertEquals(1, dataSource.getPoolingCount()); { Connection conn = dataSource.getConnection(); Assert.assertEquals(dataSource.getMinIdle(), driver.getConnections().size());