diff options
author | Jan Tattermusch <jtattermusch@users.noreply.github.com> | 2016-06-21 12:40:14 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-21 12:40:14 -0700 |
commit | be223358795b645416e801727f4d3fcad3d73964 (patch) | |
tree | 506d081c3a3220edc30e1ed2a10a352ff1a31b38 /src/core | |
parent | 7bfa751404a0f9b1581df96b714df227aa48fcf4 (diff) | |
parent | 89dde5e5681a7a718b234311e302897f5861723c (diff) |
Merge pull request #6969 from ctiller/stream_finish
Fix errored streams prematurely terminating, add a test
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/ext/transport/chttp2/transport/chttp2_transport.c | 4 | ||||
-rw-r--r-- | src/core/ext/transport/chttp2/transport/internal.h | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 4eb5ba8270..9c99ff883a 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -1093,6 +1093,7 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, stream_global->recv_trailing_metadata_finished = add_closure_barrier(on_complete); stream_global->recv_trailing_metadata = op->recv_trailing_metadata; + stream_global->final_metadata_requested = true; grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } @@ -1246,7 +1247,8 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, stream_global->recv_initial_metadata_ready = NULL; } if (stream_global->recv_message_ready != NULL) { - while (stream_global->seen_error && + while (stream_global->final_metadata_requested && + stream_global->seen_error && (bs = grpc_chttp2_incoming_frame_queue_pop( &stream_global->incoming_frames)) != NULL) { incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs); diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h index 909c406f8a..d63170e350 100644 --- a/src/core/ext/transport/chttp2/transport/internal.h +++ b/src/core/ext/transport/chttp2/transport/internal.h @@ -441,6 +441,7 @@ typedef struct { bool published_initial_metadata; bool published_trailing_metadata; + bool final_metadata_requested; grpc_chttp2_incoming_metadata_buffer received_initial_metadata; grpc_chttp2_incoming_metadata_buffer received_trailing_metadata; |