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; }