diff options
author | Craig Tiller <ctiller@google.com> | 2016-04-22 15:07:53 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2016-04-22 15:07:53 -0700 |
commit | 8a67780fba0739d1fd2466ac2bcf58cf55ec7862 (patch) | |
tree | d76e5428c36ec2906875632ad0fbb94573206505 /src | |
parent | d78ca88da1cc7989426d8cdb902c056fae2ba549 (diff) |
Fix bug causing calls to never complete
Diffstat (limited to 'src')
-rw-r--r-- | src/core/lib/surface/call.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index 0fcbed66fc..b5df9f33c1 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -220,10 +220,7 @@ struct grpc_call { } server; } final_op; - struct { - void *bctlp; - bool success; - } saved_receiving_stream_ready_ctx; + void *saved_receiving_stream_ready_bctlp; }; #define CALL_STACK_FROM_CALL(call) ((grpc_call_stack *)((call) + 1)) @@ -1065,12 +1062,11 @@ static void receiving_stream_ready(grpc_exec_ctx *exec_ctx, void *bctlp, grpc_call *call = bctl->call; gpr_mu_lock(&bctl->call->mu); - if (bctl->call->has_initial_md_been_received) { + if (bctl->call->has_initial_md_been_received || !success) { gpr_mu_unlock(&bctl->call->mu); process_data_after_md(exec_ctx, bctlp, success); } else { - call->saved_receiving_stream_ready_ctx.bctlp = bctlp; - call->saved_receiving_stream_ready_ctx.success = success; + call->saved_receiving_stream_ready_bctlp = bctlp; gpr_mu_unlock(&bctl->call->mu); } } @@ -1099,13 +1095,11 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx, } call->has_initial_md_been_received = true; - if (call->saved_receiving_stream_ready_ctx.bctlp != NULL) { + if (call->saved_receiving_stream_ready_bctlp != NULL) { grpc_closure *saved_rsr_closure = grpc_closure_create( - receiving_stream_ready, call->saved_receiving_stream_ready_ctx.bctlp); - grpc_exec_ctx_enqueue( - exec_ctx, saved_rsr_closure, - call->saved_receiving_stream_ready_ctx.success && success, NULL); - call->saved_receiving_stream_ready_ctx.bctlp = NULL; + receiving_stream_ready, call->saved_receiving_stream_ready_bctlp); + call->saved_receiving_stream_ready_bctlp = NULL; + grpc_exec_ctx_enqueue(exec_ctx, saved_rsr_closure, success, NULL); } gpr_mu_unlock(&call->mu); |