Rework a bit ConnectionPool eviction

This commit is contained in:
Julien Viet
2019-05-03 10:02:38 +02:00
parent e1bbca5f07
commit b26ab636f9

View File

@@ -301,15 +301,23 @@ public class Pool<C> {
}
} else if (capacity > 0) {
long now = clock.getAsLong();
for (Iterator<Holder> it = available.iterator();it.hasNext();) {
Holder holder = it.next();
if (holder.capacity == holder.concurrency && (holder.expirationTimestamp == 0 || now >= holder.expirationTimestamp )) {
it.remove();
return () -> {
connector.close(holder.connection);
};
List<Holder> expired = null;
for (Holder holder : available) {
if (holder.capacity == holder.concurrency && (holder.expirationTimestamp == 0 || now >= holder.expirationTimestamp)) {
if (expired == null) {
expired = new ArrayList<>();
}
expired.add(holder);
}
}
if (expired != null) {
List<Holder> toClose = expired;
return () -> {
toClose.forEach(holder -> {
connector.close(holder.connection);
});
};
}
}
return null;
}