diff options
author | Yash Tibrewal <yashkt@google.com> | 2018-09-20 18:30:42 -0700 |
---|---|---|
committer | Yash Tibrewal <yashkt@google.com> | 2018-09-20 18:30:42 -0700 |
commit | 4e7ede8dd21e831362547c1ba46607b9b0f81b76 (patch) | |
tree | ce49a2698eb0f417efe51b457c590e7e8b585214 /src/core/lib/surface/server.cc | |
parent | 34e000372f3f01a416b2e1a5c472acc6aff57dfa (diff) |
Set seen_recv_trailing_metadata to false
Diffstat (limited to 'src/core/lib/surface/server.cc')
-rw-r--r-- | src/core/lib/surface/server.cc | 42 |
1 files changed, 8 insertions, 34 deletions
diff --git a/src/core/lib/surface/server.cc b/src/core/lib/surface/server.cc index 72ddc2648d..5fa58ffdec 100644 --- a/src/core/lib/surface/server.cc +++ b/src/core/lib/surface/server.cc @@ -150,15 +150,12 @@ struct call_data { grpc_closure kill_zombie_closure; grpc_closure* on_done_recv_initial_metadata; grpc_closure recv_trailing_metadata_ready; - grpc_error* recv_initial_metadata_error; + grpc_error* error; grpc_closure* original_recv_trailing_metadata_ready; - grpc_error* recv_trailing_metadata_error; - bool seen_recv_trailing_metadata_ready; grpc_closure publish; call_data* pending_next; - grpc_call_combiner* call_combiner; }; struct request_matcher { @@ -730,43 +727,21 @@ static void server_on_recv_initial_metadata(void* ptr, grpc_error* error) { if (calld->host_set && calld->path_set) { /* do nothing */ } else { - /* Pass the error reference to calld->recv_initial_metadata_error */ grpc_error* src_error = error; error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( - "Missing :authority or :path", &src_error, 1); + "Missing :authority or :path", &error, 1); GRPC_ERROR_UNREF(src_error); - calld->recv_initial_metadata_error = GRPC_ERROR_REF(error); } - grpc_closure* closure = calld->on_done_recv_initial_metadata; - calld->on_done_recv_initial_metadata = nullptr; - if (calld->seen_recv_trailing_metadata_ready) { - GRPC_CALL_COMBINER_START(calld->call_combiner, - &calld->recv_trailing_metadata_ready, - calld->recv_trailing_metadata_error, - "continue server_recv_trailing_metadata_ready"); - } - GRPC_CLOSURE_RUN(closure, error); + + GRPC_CLOSURE_RUN(calld->on_done_recv_initial_metadata, error); } static void server_recv_trailing_metadata_ready(void* user_data, - grpc_error* error) { + grpc_error* err) { grpc_call_element* elem = static_cast<grpc_call_element*>(user_data); call_data* calld = static_cast<call_data*>(elem->call_data); - if (calld->on_done_recv_initial_metadata != nullptr) { - calld->recv_trailing_metadata_error = GRPC_ERROR_REF(error); - calld->seen_recv_trailing_metadata_ready = true; - GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready, - server_recv_trailing_metadata_ready, elem, - grpc_schedule_on_exec_ctx); - GRPC_CALL_COMBINER_STOP(calld->call_combiner, - "deferring server_recv_trailing_metadata_ready " - "until after server_on_recv_initial_metadata"); - return; - } - error = - grpc_error_add_child(GRPC_ERROR_REF(error), - GRPC_ERROR_REF(calld->recv_initial_metadata_error)); - GRPC_CLOSURE_RUN(calld->original_recv_trailing_metadata_ready, error); + err = grpc_error_add_child(GRPC_ERROR_REF(err), GRPC_ERROR_REF(calld->error)); + GRPC_CLOSURE_RUN(calld->original_recv_trailing_metadata_ready, err); } static void server_mutate_op(grpc_call_element* elem, @@ -870,7 +845,6 @@ static grpc_error* init_call_elem(grpc_call_element* elem, memset(calld, 0, sizeof(call_data)); calld->deadline = GRPC_MILLIS_INF_FUTURE; calld->call = grpc_call_from_top_element(elem); - calld->call_combiner = args->call_combiner; GRPC_CLOSURE_INIT(&calld->server_on_recv_initial_metadata, server_on_recv_initial_metadata, elem, @@ -889,7 +863,7 @@ static void destroy_call_elem(grpc_call_element* elem, call_data* calld = static_cast<call_data*>(elem->call_data); GPR_ASSERT(calld->state != PENDING); - GRPC_ERROR_UNREF(calld->recv_initial_metadata_error); + GRPC_ERROR_UNREF(calld->error); if (calld->host_set) { grpc_slice_unref_internal(calld->host); } |