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 8ea8c21c07..87ecb8c0ef 100644 --- a/src/main/java/org/jboss/netty/handler/timeout/IdleStateHandler.java +++ b/src/main/java/org/jboss/netty/handler/timeout/IdleStateHandler.java @@ -201,7 +201,10 @@ public class IdleStateHandler extends SimpleChannelUpstreamHandler } public void beforeAdd(ChannelHandlerContext ctx) throws Exception { - initialize(ctx); + if (ctx.getPipeline().isAttached()) { + // channelOpen() has been called already - initialize here instead. + initialize(ctx); + } } public void afterAdd(ChannelHandlerContext ctx) throws Exception { @@ -219,7 +222,7 @@ public class IdleStateHandler extends SimpleChannelUpstreamHandler @Override public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { - lastReadTime = lastWriteTime = System.currentTimeMillis(); + initialize(ctx); } @Override diff --git a/src/main/java/org/jboss/netty/handler/timeout/ReadTimeoutHandler.java b/src/main/java/org/jboss/netty/handler/timeout/ReadTimeoutHandler.java index febf61fa49..eed2a39b9b 100644 --- a/src/main/java/org/jboss/netty/handler/timeout/ReadTimeoutHandler.java +++ b/src/main/java/org/jboss/netty/handler/timeout/ReadTimeoutHandler.java @@ -120,7 +120,10 @@ public class ReadTimeoutHandler extends SimpleChannelUpstreamHandler } public void beforeAdd(ChannelHandlerContext ctx) throws Exception { - initialize(ctx); + if (ctx.getPipeline().isAttached()) { + // channelOpen() has been called already - initialize here instead. + initialize(ctx); + } } public void afterAdd(ChannelHandlerContext ctx) throws Exception { @@ -138,7 +141,7 @@ public class ReadTimeoutHandler extends SimpleChannelUpstreamHandler @Override public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { - updateLastReadTime(); + initialize(ctx); ctx.sendUpstream(e); }