diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index af3d467314..7a980e87a4 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -917,6 +917,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat long currentMillis = System.currentTimeMillis(); + List abondonedList = new ArrayList(); + for (; iter.hasNext();) { Map.Entry entry = iter.next(); ActiveConnectionTraceInfo activeInfo = entry.getValue(); @@ -927,6 +929,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat JdbcUtils.close(pooledConnection); removeAbandonedCount++; removeCount++; + abondonedList.add(pooledConnection); if (isLogAbandoned()) { StringBuilder buf = new StringBuilder(); @@ -943,6 +946,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } } + + // multi-check dup close + for (PoolableConnection conn : abondonedList) { + activeConnections.remove(conn); + } return removeCount; }