From b7b61565058eb8ffc0dd98fce9ed880878775b63 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Fri, 22 Nov 2019 10:12:21 +0100 Subject: [PATCH] Remove atomic usage in DefaultChannelHandlerContext as all pipeline operations are on the EventLoop (#9794) Motivation: In netty 5.x we changed to have all pipeline operations be executed on the EventLoop so there is no need to have an atomic operation involved anymore to update the handler state. Modifications: Remove atomic usage to handle the handler state Result: Simpler code and less overhead --- .../netty/channel/DefaultChannelHandlerContext.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java b/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java index ae2c4883a7..ae94bc9929 100644 --- a/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java +++ b/transport/src/main/java/io/netty/channel/DefaultChannelHandlerContext.java @@ -32,7 +32,6 @@ import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; import java.net.SocketAddress; -import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import static io.netty.channel.ChannelHandlerMask.*; @@ -40,9 +39,6 @@ final class DefaultChannelHandlerContext implements ChannelHandlerContext, Resou private static final InternalLogger logger = InternalLoggerFactory.getInstance(DefaultChannelHandlerContext.class); - private static final AtomicIntegerFieldUpdater HANDLER_STATE_UPDATER = - AtomicIntegerFieldUpdater.newUpdater(DefaultChannelHandlerContext.class, "handlerState"); - /** * Neither {@link ChannelHandler#handlerAdded(ChannelHandlerContext)} * nor {@link ChannelHandler#handlerRemoved(ChannelHandlerContext)} was called. @@ -70,7 +66,7 @@ final class DefaultChannelHandlerContext implements ChannelHandlerContext, Resou DefaultChannelHandlerContext next; DefaultChannelHandlerContext prev; - private volatile int handlerState = INIT; + private int handlerState = INIT; // Keeps track of processing different events private short outboundOperations; @@ -1100,7 +1096,11 @@ final class DefaultChannelHandlerContext implements ChannelHandlerContext, Resou // Ensure we never update when the handlerState is REMOVE_COMPLETE already. // oldState is usually ADD_PENDING but can also be REMOVE_COMPLETE when an EventExecutor is used that is not // exposing ordering guarantees. - return HANDLER_STATE_UPDATER.getAndSet(this, ADD_COMPLETE) != REMOVE_COMPLETE; + if (handlerState != REMOVE_COMPLETE) { + handlerState = ADD_COMPLETE; + return true; + } + return false; } void callHandlerAdded() throws Exception {