diff --git a/transport/src/main/java/io/netty/channel/nio/NioEventLoop.java b/transport/src/main/java/io/netty/channel/nio/NioEventLoop.java index f35e272ac4..f2103a8ff9 100644 --- a/transport/src/main/java/io/netty/channel/nio/NioEventLoop.java +++ b/transport/src/main/java/io/netty/channel/nio/NioEventLoop.java @@ -40,7 +40,6 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.Collection; -import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.Queue; import java.util.Set; @@ -340,35 +339,32 @@ public final class NioEventLoop extends SingleThreadEventLoop { // Register all channels to the new Selector. int nChannels = 0; - for (;;) { - for (SelectionKey key: oldSelector.keys()) { - Object a = key.attachment(); - try { - if (!key.isValid() || key.channel().keyFor(newSelector) != null) { - continue; - } + for (SelectionKey key: oldSelector.keys()) { + Object a = key.attachment(); + try { + if (!key.isValid() || key.channel().keyFor(newSelector) != null) { + continue; + } - int interestOps = key.interestOps(); - key.cancel(); - SelectionKey newKey = key.channel().register(newSelector, interestOps, a); - if (a instanceof AbstractNioChannel) { - // Update SelectionKey - ((AbstractNioChannel) a).selectionKey = newKey; - } - nChannels ++; - } catch (Exception e) { - logger.warn("Failed to re-register a Channel to the new Selector.", e); - if (a instanceof AbstractNioChannel) { - AbstractNioChannel ch = (AbstractNioChannel) a; - ch.unsafe().close(ch.unsafe().voidPromise()); - } else { - @SuppressWarnings("unchecked") - NioTask task = (NioTask) a; - invokeChannelUnregistered(task, key, e); - } + int interestOps = key.interestOps(); + key.cancel(); + SelectionKey newKey = key.channel().register(newSelector, interestOps, a); + if (a instanceof AbstractNioChannel) { + // Update SelectionKey + ((AbstractNioChannel) a).selectionKey = newKey; + } + nChannels ++; + } catch (Exception e) { + logger.warn("Failed to re-register a Channel to the new Selector.", e); + if (a instanceof AbstractNioChannel) { + AbstractNioChannel ch = (AbstractNioChannel) a; + ch.unsafe().close(ch.unsafe().voidPromise()); + } else { + @SuppressWarnings("unchecked") + NioTask task = (NioTask) a; + invokeChannelUnregistered(task, key, e); } } - break; } selector = newSelector; @@ -645,10 +641,6 @@ public final class NioEventLoop extends SingleThreadEventLoop { // to a spin loop if ((readyOps & (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) != 0 || readyOps == 0) { unsafe.read(); - if (!ch.isOpen()) { - // Connection already closed - no need to handle write. - return; - } } } catch (CancelledKeyException ignored) { unsafe.close(unsafe.voidPromise());