aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/transport
diff options
context:
space:
mode:
authorGravatar Muxi Yan <mxyan@google.com>2017-03-19 00:25:22 -0700
committerGravatar Muxi Yan <mxyan@google.com>2017-03-19 00:25:22 -0700
commit408f36bf286928f069ef256577736a655c38e9d1 (patch)
tree4d9d65d2acbaa0fab6a2fb227f241a541e4ecd36 /src/core/ext/transport
parent0901b168f391858ff44ea3c724a5b5fdeb18ea93 (diff)
Bug fix
Diffstat (limited to 'src/core/ext/transport')
-rw-r--r--src/core/ext/transport/chttp2/transport/chttp2_transport.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 83b27a49aa..79aa05e212 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -1646,15 +1646,18 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
bs->push_closed = true;
if (bs->on_next != NULL) {
gpr_mu_unlock(&bs->slice_mu);
+ gpr_mu_unlock(&s->buffer_mu);
grpc_chttp2_incoming_byte_stream_finished(
exec_ctx, s->data_parser.parsing_frame, GRPC_ERROR_REF(error));
s->data_parser.parsing_frame = NULL;
} else {
bs->error = GRPC_ERROR_REF(error);
gpr_mu_unlock(&bs->slice_mu);
+ gpr_mu_unlock(&s->buffer_mu);
}
+ } else {
+ gpr_mu_unlock(&s->buffer_mu);
}
- gpr_mu_unlock(&s->buffer_mu);
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
post_benign_reclaimer(exec_ctx, t);
@@ -2519,8 +2522,9 @@ static void incoming_byte_stream_next_locked(grpc_exec_ctx *exec_ctx,
GRPC_ERROR_REF(bs->error));
} else if (bs->push_closed) {
if (bs->remaining_bytes != 0) {
+ bs->error = GRPC_ERROR_CREATE("Truncated message");
grpc_closure_sched(exec_ctx, bs->next_action.on_complete,
- GRPC_ERROR_CREATE("Truncated message"));
+ GRPC_ERROR_REF(bs->error));
} else {
/* Should never reach here. */
GPR_ASSERT(false);
@@ -2557,6 +2561,10 @@ static grpc_error *incoming_byte_stream_pull(grpc_exec_ctx *exec_ctx,
gpr_mu_unlock(&s->buffer_mu);
return error;
}
+ } else {
+ bs->error = GRPC_ERROR_CREATE("Truncated message");
+ gpr_mu_unlock(&s->buffer_mu);
+ return bs->error;
}
gpr_mu_unlock(&s->buffer_mu);
GPR_TIMER_END("incoming_byte_stream_pull", 0);