diff --git a/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java b/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java index 59d17555e9..b16b5bdcc8 100755 --- a/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java +++ b/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java @@ -125,7 +125,7 @@ final class DefaultChannelHandlerContext extends DefaultAttributeMap implements DefaultChannelHandlerContext prev = this.prev; if (prev != null) { synchronized (pipeline) { - pipeline.remove0(this, true); + pipeline.remove0(this); } prev.teardown(); } diff --git a/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java b/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java index 2388cecab6..4a099291a4 100755 --- a/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java +++ b/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java @@ -316,14 +316,14 @@ final class DefaultChannelPipeline implements ChannelPipeline { synchronized (this) { if (!ctx.channel().isRegistered() || ctx.executor().inEventLoop()) { - remove0(ctx, false); + remove0(ctx); return ctx; } else { future = ctx.executor().submit(new Runnable() { @Override public void run() { synchronized (DefaultChannelPipeline.this) { - remove0(ctx, false); + remove0(ctx); } } }); @@ -339,13 +339,13 @@ final class DefaultChannelPipeline implements ChannelPipeline { return context; } - void remove0(DefaultChannelHandlerContext ctx, boolean tearDown) { + void remove0(DefaultChannelHandlerContext ctx) { DefaultChannelHandlerContext prev = ctx.prev; DefaultChannelHandlerContext next = ctx.next; prev.next = next; next.prev = prev; name2ctx.remove(ctx.name()); - callHandlerRemoved(ctx, tearDown); + callHandlerRemoved(ctx); } @Override @@ -450,7 +450,7 @@ final class DefaultChannelPipeline implements ChannelPipeline { // because callHandlerRemoved() will trigger inboundBufferUpdated() or flush() on newHandler and those // event handlers must be called after handlerAdded(). callHandlerAdded(newCtx); - callHandlerRemoved(oldCtx, false); + callHandlerRemoved(oldCtx); } private static void checkMultiplicity(ChannelHandlerContext ctx) { @@ -505,26 +505,24 @@ final class DefaultChannelPipeline implements ChannelPipeline { } } - private void callHandlerRemoved(final DefaultChannelHandlerContext ctx, final boolean tearDown) { + private void callHandlerRemoved(final DefaultChannelHandlerContext ctx) { if (ctx.channel().isRegistered() && !ctx.executor().inEventLoop()) { ctx.executor().execute(new Runnable() { @Override public void run() { - callHandlerRemoved0(ctx, tearDown); + callHandlerRemoved0(ctx); } }); return; } - callHandlerRemoved0(ctx, tearDown); + callHandlerRemoved0(ctx); } - private void callHandlerRemoved0(final DefaultChannelHandlerContext ctx, boolean tearDown) { + private void callHandlerRemoved0(final DefaultChannelHandlerContext ctx) { // Notify the complete removal. try { ctx.handler().handlerRemoved(ctx); - if (!tearDown) { - ctx.setRemoved(); - } + ctx.setRemoved(); } catch (Throwable t) { fireExceptionCaught(new ChannelPipelineException( ctx.handler().getClass().getName() + ".handlerRemoved() has thrown an exception.", t));