From b1cfaad9bf66966ad89dae4f2ca28faa9f21188e Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Fri, 26 Oct 2012 11:40:20 +0200 Subject: [PATCH] Fix NPE which can accour when the Selector is closed but there are still timeout tasks to handle on client mode. The NPE does not have any bad side-effects, but its still ugly. See #685 --- .../channel/socket/nio/NioClientSocketPipelineSink.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 2f8e26f096..e85c9c107e 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 @@ -187,6 +187,12 @@ class NioClientSocketPipelineSink extends AbstractNioChannelSink { private final int subId; private final TimerTask wakeupTask = new TimerTask() { public void run(Timeout timeout) throws Exception { + // This is needed to prevent a possible race that can lead to a NPE + // when the selector is closed before this is run + // + // See https://github.com/netty/netty/issues/685 + Selector selector = NioClientSocketPipelineSink.Boss.this.selector; + if (selector != null) { if (wakenUp.compareAndSet(false, true)) { selector.wakeup();