From 4c2d6ff4979b12f5c86439d456bb2e7b7bea5a2d Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 26 Jul 2011 02:09:38 +0000 Subject: [PATCH] git-svn-id: http://code.alibabatech.com/svn/druid/trunk@518 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- "D:\\data.txt" | 0 .../com/alibaba/druid/pool/DruidDataSource.java | 16 ++++++++++++---- .../com/alibaba/druid/bvt/pool/TestIdle.java | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 "D:\\data.txt" diff --git "a/D:\\data.txt" "b/D:\\data.txt" new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 5777ef09f8..b20c089a96 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -699,8 +699,16 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (numTestsPerEvictionRun <= 0) { numTestsPerEvictionRun = 1; } + - for (int i = 0; i < numTestsPerEvictionRun && i < count; ++i) { + final int testCount; + if (numTestsPerEvictionRun <= count) { + testCount = numTestsPerEvictionRun; + } else { + testCount = count; + } + + for (int i = 0; i < testCount; ++i) { ConnectionHolder connection = connections[i]; if (evictCount == 0 && idleCount == 0 && connection == null) { @@ -708,14 +716,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } long idleMillis = System.currentTimeMillis() - connection.getLastActiveMillis(); - if (idleMillis >= minEvictableIdleTimeMillis) { + if (idleMillis >= minEvictableIdleTimeMillis && count - evictList.size() > minIdle) { evictList.add(connection); } else { idleList.add(connection); } } - System.arraycopy(connections, numTestsPerEvictionRun, connections, 0, count - numTestsPerEvictionRun); - for (int i = 0; i < numTestsPerEvictionRun; ++i) { + System.arraycopy(connections, testCount, connections, 0, count - testCount); + for (int i = 0; i < testCount; ++i) { connections[--count] = null; } } finally { 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 fc7696070e..fcccda62fb 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(1, dataSource.getPoolingCount()); + Assert.assertEquals(0, dataSource.getPoolingCount()); { Connection conn = dataSource.getConnection(); Assert.assertEquals(dataSource.getMinIdle(), driver.getConnections().size());