From 98b11bdde4c792f9b817d7fed46dfcad5195140e Mon Sep 17 00:00:00 2001 From: "Penn (Dapeng) Zhang" Date: Wed, 15 Jan 2020 12:42:33 -0800 Subject: [PATCH] core,netty: fix a race for channelz at server transport creation --- .../main/java/io/grpc/internal/ServerImpl.java | 4 +++- .../main/java/io/grpc/netty/NettyServer.java | 17 ++++------------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/io/grpc/internal/ServerImpl.java b/core/src/main/java/io/grpc/internal/ServerImpl.java index 85d857932309..4df2722c93d9 100644 --- a/core/src/main/java/io/grpc/internal/ServerImpl.java +++ b/core/src/main/java/io/grpc/internal/ServerImpl.java @@ -439,7 +439,9 @@ class TransportShutdownNow implements Runnable { @Override public void run() {} }, null); } - channelz.addServerSocket(ServerImpl.this, transport); + synchronized (lock) { + channelz.addServerSocket(ServerImpl.this, transport); + } } @Override diff --git a/netty/src/main/java/io/grpc/netty/NettyServer.java b/netty/src/main/java/io/grpc/netty/NettyServer.java index 5c400198817a..af48b0f42f66 100644 --- a/netty/src/main/java/io/grpc/netty/NettyServer.java +++ b/netty/src/main/java/io/grpc/netty/NettyServer.java @@ -251,19 +251,10 @@ public void operationComplete(ChannelFuture future) throws Exception { throw new IOException("Failed to bind", future.cause()); } channel = future.channel(); - Future channelzFuture = channel.eventLoop().submit(new Runnable() { - @Override - public void run() { - InternalInstrumented listenSocket = new ListenSocket(channel); - listenSocketStats.set(listenSocket); - channelz.addListenSocket(listenSocket); - } - }); - try { - channelzFuture.await(); - } catch (InterruptedException ex) { - throw new RuntimeException("Interrupted while registering listen socket to channelz", ex); - } + + InternalInstrumented listenSocket = new ListenSocket(channel); + listenSocketStats.set(listenSocket); + channelz.addListenSocket(listenSocket); } @Override