diff --git a/core/src/main/java/io/grpc/internal/ServerImpl.java b/core/src/main/java/io/grpc/internal/ServerImpl.java index 85d8579323..6e9cb9bf5e 100644 --- a/core/src/main/java/io/grpc/internal/ServerImpl.java +++ b/core/src/main/java/io/grpc/internal/ServerImpl.java @@ -486,6 +486,7 @@ public final class ServerImpl extends io.grpc.Server implements InternalInstrume String encoding = headers.get(MESSAGE_ENCODING_KEY); Decompressor decompressor = decompressorRegistry.lookupDecompressor(encoding); if (decompressor == null) { + stream.setListener(NOOP_LISTENER); stream.close( Status.UNIMPLEMENTED.withDescription( String.format("Can't find decompressor for %s", encoding)), diff --git a/core/src/test/java/io/grpc/internal/ServerImplTest.java b/core/src/test/java/io/grpc/internal/ServerImplTest.java index d2011f9541..2fe2692bcd 100644 --- a/core/src/test/java/io/grpc/internal/ServerImplTest.java +++ b/core/src/test/java/io/grpc/internal/ServerImplTest.java @@ -487,6 +487,7 @@ public class ServerImplTest { transportListener.streamCreated(stream, "Waiter/nonexist", requestHeaders); + verify(stream).setListener(isA(ServerStreamListener.class)); verify(stream).streamId(); verify(stream).close(statusCaptor.capture(), any(Metadata.class)); Status status = statusCaptor.getValue();