修正连接池不能正确被回收的问题

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@538 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-08-30 04:28:43 +00:00
parent 3aa0b3c855
commit 00bd2098a7
2 changed files with 7 additions and 17 deletions
@@ -694,7 +694,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
initedLatch.countDown();
final List<ConnectionHolder> evictList = new ArrayList<ConnectionHolder>();
final List<ConnectionHolder> idleList = new ArrayList<ConnectionHolder>();
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;