diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java index 19154e11a1..ba7017db72 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java @@ -234,6 +234,13 @@ class NioClientSocketPipelineSink extends AbstractChannelSink { try { int selectedKeyCount = selector.select(500); + // Wake up immediately in the next turn if someone might + // have waken up the selector between 'wakenUp.set(false)' + // and 'selector.select(...)'. + if (wakenUp.get()) { + selector.wakeup(); + } + processRegisterTaskQueue(); if (selectedKeyCount > 0) { 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 55e4ed04cf..d758f1bfd2 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 @@ -155,6 +155,13 @@ class NioWorker implements Runnable { try { int selectedKeyCount = selector.select(500); + // Wake up immediately in the next turn if someone might + // have waken up the selector between 'wakenUp.set(false)' + // and 'selector.select(...)'. + if (wakenUp.get()) { + selector.wakeup(); + } + processRegisterTaskQueue(); processWriteTaskQueue();