diff --git a/netty/src/main/java/io/grpc/netty/ClientTransportLifecycleManager.java b/netty/src/main/java/io/grpc/netty/ClientTransportLifecycleManager.java index 4addf59215..34f72ab97b 100644 --- a/netty/src/main/java/io/grpc/netty/ClientTransportLifecycleManager.java +++ b/netty/src/main/java/io/grpc/netty/ClientTransportLifecycleManager.java @@ -37,14 +37,19 @@ final class ClientTransportLifecycleManager { this.listener = listener; } - public Attributes notifyReady(Attributes attributes) { + public Attributes filterAttributes(Attributes attributes) { if (transportReady || transportShutdown) { return attributes; } + return listener.filterTransport(attributes); + } + + public void notifyReady() { + if (transportReady || transportShutdown) { + return; + } transportReady = true; - attributes = listener.filterTransport(attributes); listener.transportReady(); - return attributes; } /** diff --git a/netty/src/main/java/io/grpc/netty/NettyClientHandler.java b/netty/src/main/java/io/grpc/netty/NettyClientHandler.java index 3c8c128d15..eb4dbf8cc6 100644 --- a/netty/src/main/java/io/grpc/netty/NettyClientHandler.java +++ b/netty/src/main/java/io/grpc/netty/NettyClientHandler.java @@ -131,7 +131,7 @@ class NettyClientHandler extends AbstractNettyHandler { private WriteQueue clientWriteQueue; private Http2Ping ping; - private volatile Attributes attributes; + private Attributes attributes; private InternalChannelz.Security securityInfo; private Status abruptGoAwayStatus; private Status channelInactiveReason; @@ -917,7 +917,8 @@ class NettyClientHandler extends AbstractNettyHandler { public void onSettingsRead(ChannelHandlerContext ctx, Http2Settings settings) { if (firstSettings) { firstSettings = false; - attributes = lifecycleManager.notifyReady(attributes); + attributes = lifecycleManager.filterAttributes(attributes); + lifecycleManager.notifyReady(); } }