From 40378616681e8b8664b4fcdab7cc4efe1ce64244 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Thu, 3 Feb 2022 09:51:37 +0100 Subject: [PATCH] =?UTF-8?q?Fixes=20#7514=20-=20Adding=20InheritedListeners?= =?UTF-8?q?=20to=20already-started=20components=E2=80=A6=20(#7522)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixes #7514 - Adding InheritedListeners to already-started components can cause IllegalStateException Removed the unnecessary check-and-throw statements from SelectorManager. Use COW array for listeners that can be modified whilst selector is running. Signed-off-by: Simone Bordet Signed-off-by: Greg Wilkins Co-authored-by: Greg Wilkins --- .../main/java/org/eclipse/jetty/io/SelectorManager.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java b/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java index f570fbd4662b..34f555e49656 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java @@ -22,10 +22,10 @@ import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; -import java.util.ArrayList; import java.util.Arrays; import java.util.EventListener; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.IntUnaryOperator; @@ -60,7 +60,7 @@ public abstract class SelectorManager extends ContainerLifeCycle implements Dump private final ManagedSelector[] _selectors; private final AtomicInteger _selectorIndex = new AtomicInteger(); private final IntUnaryOperator _selectorIndexUpdate; - private final List _acceptListeners = new ArrayList<>(); + private final List _acceptListeners = new CopyOnWriteArrayList<>(); private long _connectTimeout = DEFAULT_CONNECT_TIMEOUT; private ThreadPoolBudget.Lease _lease; @@ -396,8 +396,6 @@ protected void connectionFailed(SelectableChannel channel, Throwable ex, Object @Override public boolean addEventListener(EventListener listener) { - if (isRunning()) - throw new IllegalStateException(this.toString()); if (super.addEventListener(listener)) { if (listener instanceof AcceptListener) @@ -410,8 +408,6 @@ public boolean addEventListener(EventListener listener) @Override public boolean removeEventListener(EventListener listener) { - if (isRunning()) - throw new IllegalStateException(this.toString()); if (super.removeEventListener(listener)) { if (listener instanceof AcceptListener)