diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc index 6d25f5c7724..87d0aacd159 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc @@ -2204,9 +2204,12 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t, grpc_chttp2_stream* s, int close_reads, int close_writes, grpc_error* error) { if (s->read_closed && s->write_closed) { - /* already closed */ + /* already closed, but we should still fake the status if needed. */ + grpc_error* overall_error = removal_error(error, s, "Stream removed"); + if (overall_error != GRPC_ERROR_NONE) { + grpc_chttp2_fake_status(t, s, overall_error); + } grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s); - GRPC_ERROR_UNREF(error); return; } bool closed_read = false;