diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java index bfad417067..3c7c059f7c 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java @@ -89,14 +89,19 @@ class NioWorker implements Runnable { boolean firstChannel = started.compareAndSet(false, true); Selector selector; if (firstChannel) { + boolean success = false; selectorGuard.writeLock().lock(); try { this.selector = selector = Selector.open(); + success = true; } catch (IOException e) { throw new ChannelException( "Failed to create a selector.", e); } finally { selectorGuard.writeLock().unlock(); + if (!success) { + started.compareAndSet(true, false); + } } } else { selector = this.selector;