From b26ab636f9a193eea40ac8d87a7d808a67ca87e3 Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Fri, 3 May 2019 10:02:38 +0200 Subject: [PATCH] Rework a bit ConnectionPool eviction --- .../io/vertx/core/http/impl/pool/Pool.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/vertx/core/http/impl/pool/Pool.java b/src/main/java/io/vertx/core/http/impl/pool/Pool.java index 0d1f6a224..a4a956b91 100644 --- a/src/main/java/io/vertx/core/http/impl/pool/Pool.java +++ b/src/main/java/io/vertx/core/http/impl/pool/Pool.java @@ -301,15 +301,23 @@ public class Pool { } } else if (capacity > 0) { long now = clock.getAsLong(); - for (Iterator 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 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 toClose = expired; + return () -> { + toClose.forEach(holder -> { + connector.close(holder.connection); + }); + }; + } } return null; }