From 7e156b1e62e765555dd1093b120621017cefd046 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Mon, 10 Feb 2020 19:30:53 +0100 Subject: [PATCH] Reduce scope of synchronized block introduced in 5114588cba45179c85b0ce141e10e1e16145af51 (#10013) Motivation: We should keep the scope of the synchronized block as small as possible. Modifications: Reduce scope by copy to an array first before iterate through it Result: Smaller scope of synchronized --- .../io/netty/resolver/AddressResolverGroup.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/resolver/src/main/java/io/netty/resolver/AddressResolverGroup.java b/resolver/src/main/java/io/netty/resolver/AddressResolverGroup.java index 7020219293..6a4142e4f3 100644 --- a/resolver/src/main/java/io/netty/resolver/AddressResolverGroup.java +++ b/resolver/src/main/java/io/netty/resolver/AddressResolverGroup.java @@ -102,19 +102,19 @@ public abstract class AddressResolverGroup implements C @SuppressWarnings({ "unchecked", "SuspiciousToArrayCall" }) public void close() { final AddressResolver[] rArray; + final Map.Entry>>[] listeners; + synchronized (resolvers) { rArray = (AddressResolver[]) resolvers.values().toArray(new AddressResolver[0]); resolvers.clear(); - - for (final Map.Entry>> entry : - executorTerminationListeners.entrySet()) { - - entry.getKey().terminationFuture().removeListener(entry.getValue()); - } - + listeners = executorTerminationListeners.entrySet().toArray(new Map.Entry[0]); executorTerminationListeners.clear(); } + for (final Map.Entry>> entry : listeners) { + entry.getKey().terminationFuture().removeListener(entry.getValue()); + } + for (final AddressResolver r: rArray) { try { r.close();