diff --git a/netty/src/main/java/io/grpc/netty/NettyServerHandler.java b/netty/src/main/java/io/grpc/netty/NettyServerHandler.java index e7d6ea2dd9..06b5a3fb9f 100644 --- a/netty/src/main/java/io/grpc/netty/NettyServerHandler.java +++ b/netty/src/main/java/io/grpc/netty/NettyServerHandler.java @@ -261,18 +261,21 @@ class NettyServerHandler extends AbstractNettyHandler { */ @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - super.channelInactive(ctx); - // Any streams that are still active must be closed - connection().forEachActiveStream(new Http2StreamVisitor() { - @Override - public boolean visit(Http2Stream stream) throws Http2Exception { - NettyServerStream serverStream = serverStream(stream); - if (serverStream != null) { - serverStream.abortStream(GOAWAY_STATUS, false); + try { + // Any streams that are still active must be closed + connection().forEachActiveStream(new Http2StreamVisitor() { + @Override + public boolean visit(Http2Stream stream) throws Http2Exception { + NettyServerStream serverStream = serverStream(stream); + if (serverStream != null) { + serverStream.abortStream(GOAWAY_STATUS, false); + } + return true; } - return true; - } - }); + }); + } finally { + super.channelInactive(ctx); + } } WriteQueue getWriteQueue() { diff --git a/netty/src/test/java/io/grpc/netty/NettyServerHandlerTest.java b/netty/src/test/java/io/grpc/netty/NettyServerHandlerTest.java index 87078c2a4d..52ec3fd402 100644 --- a/netty/src/test/java/io/grpc/netty/NettyServerHandlerTest.java +++ b/netty/src/test/java/io/grpc/netty/NettyServerHandlerTest.java @@ -237,6 +237,15 @@ public class NettyServerHandlerTest extends NettyHandlerTestBase captor = ArgumentCaptor.forClass(Status.class); + verify(streamListener).closed(captor.capture()); + assertFalse(captor.getValue().isOk()); + } + @Test public void shouldAdvertiseMaxConcurrentStreams() throws Exception { maxConcurrentStreams = 314;