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(