diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c index e1fc0ddee200ec85d1f0b3607ab3320ebeec9b7c..6e86431b1c9ea6c7616e9933fcaced100747472a 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.c +++ b/src/core/ext/transport/chttp2/transport/parsing.c @@ -253,8 +253,16 @@ void grpc_chttp2_publish_reads( } if (stream_parsing->received_close) { - grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, - 1, 0, GRPC_ERROR_NONE); + if (transport_global->is_client && !stream_global->write_closed) { + gpr_slice_buffer_add(&transport_global->qbuf, + grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id, GRPC_CHTTP2_NO_ERROR, &stream_parsing->stats.outgoing)); + grpc_chttp2_initiate_write(exec_ctx, transport_global, false, "rst"); + grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, + 1, 1, GRPC_ERROR_NONE); + } else { + grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, + 1, 0, GRPC_ERROR_NONE); + } } } }