From 54bba7239cafaf416c07cc407ed35ab74ff49522 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Sat, 7 Jan 2012 17:44:36 +0100 Subject: [PATCH] Fix NPE which is triggered if the destory method is called before channelOpen(..). See #143 --- .../handler/timeout/IdleStateHandler.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/jboss/netty/handler/timeout/IdleStateHandler.java b/src/main/java/org/jboss/netty/handler/timeout/IdleStateHandler.java index ee8692309f..d1ea79d0f9 100644 --- a/src/main/java/org/jboss/netty/handler/timeout/IdleStateHandler.java +++ b/src/main/java/org/jboss/netty/handler/timeout/IdleStateHandler.java @@ -304,18 +304,26 @@ public class IdleStateHandler extends SimpleChannelUpstreamHandler private void destroy(ChannelHandlerContext ctx) { State state = (State) ctx.getAttachment(); - if (state.readerIdleTimeout != null) { - state.readerIdleTimeout.cancel(); - state.readerIdleTimeout = null; - } - if (state.writerIdleTimeout != null) { - state.writerIdleTimeout.cancel(); - state.writerIdleTimeout = null; - } - if (state.allIdleTimeout != null) { - state.allIdleTimeout.cancel(); - state.allIdleTimeout = null; + + // Check if the state was set before, it may not if the destroy method was called before the + // channelOpen(...) method. + // + // See #143 + if (state != null) { + if (state.readerIdleTimeout != null) { + state.readerIdleTimeout.cancel(); + state.readerIdleTimeout = null; + } + if (state.writerIdleTimeout != null) { + state.writerIdleTimeout.cancel(); + state.writerIdleTimeout = null; + } + if (state.allIdleTimeout != null) { + state.allIdleTimeout.cancel(); + state.allIdleTimeout = null; + } } + } protected void channelIdle(