diff options
author | 2018-06-21 17:22:09 -0700 | |
---|---|---|
committer | 2018-06-21 17:22:09 -0700 | |
commit | dd0995d0159169d23f92eaf1df228033c337866c (patch) | |
tree | 08e726786a312f2012a0b0c54f3143eb32e04487 /src/core/ext/filters/message_size | |
parent | 3c37b728a9b6cb2d087f49a201d9a0218adc9408 (diff) |
Changes
Diffstat (limited to 'src/core/ext/filters/message_size')
-rw-r--r-- | src/core/ext/filters/message_size/message_size_filter.cc | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/src/core/ext/filters/message_size/message_size_filter.cc b/src/core/ext/filters/message_size/message_size_filter.cc index a859476dab..f3081df38d 100644 --- a/src/core/ext/filters/message_size/message_size_filter.cc +++ b/src/core/ext/filters/message_size/message_size_filter.cc @@ -99,7 +99,7 @@ struct call_data { // recv_message_ready up-call on transport_stream_op, and remember to // call our next_recv_message_ready member after handling it. grpc_closure recv_message_ready; - grpc_closure recv_trailing_metadata; + grpc_closure recv_trailing_metadata_ready; // The error caused by a message that is too large, or GRPC_ERROR_NONE grpc_error* error; // Used by recv_message_ready. @@ -107,7 +107,7 @@ struct call_data { // Original recv_message_ready callback, invoked after our own. grpc_closure* next_recv_message_ready; // Original recv_trailing_metadata callback, invoked after our own. - grpc_closure* next_recv_trailing_metadata; + grpc_closure* next_recv_trailing_metadata_ready; }; struct channel_data { @@ -136,13 +136,13 @@ static void recv_message_ready(void* user_data, grpc_error* error) { GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED); GRPC_ERROR_UNREF(calld->error); - calld->error = GRPC_ERROR_REF(new_error); if (error == GRPC_ERROR_NONE) { error = new_error; } else { error = grpc_error_add_child(error, new_error); GRPC_ERROR_UNREF(new_error); } + calld->error = GRPC_ERROR_REF(error); gpr_free(message_string); } else { GRPC_ERROR_REF(error); @@ -153,19 +153,20 @@ static void recv_message_ready(void* user_data, grpc_error* error) { // Callback invoked on completion of recv_trailing_metadata // Notifies the recv_trailing_metadata batch of any message size failures -static void recv_trailing_metadata(void* user_data, grpc_error* error) { - grpc_call_element* elem = (grpc_call_element*)user_data; - call_data* calld = (call_data*)elem->call_data; - if (error == GRPC_ERROR_NONE) { - error = calld->error; - } else if (calld->error == GRPC_ERROR_NONE) { +static void recv_trailing_metadata_ready(void* user_data, grpc_error* error) { + grpc_call_element* elem = static_cast<grpc_call_element*>(user_data); + call_data* calld = static_cast<call_data*>(elem->call_data); + if (calld->error != GRPC_ERROR_NONE) { + if (error == GRPC_ERROR_NONE) { + error = GRPC_ERROR_REF(calld->error); + } else { + error = grpc_error_add_child(error, calld->error); + } + } else { error = GRPC_ERROR_REF(error); - } else if (calld->error != error) { - error = grpc_error_add_child(GRPC_ERROR_REF(error), calld->error); } - calld->error = GRPC_ERROR_NONE; // Invoke the next callback. - GRPC_CLOSURE_RUN(calld->next_recv_trailing_metadata, error); + GRPC_CLOSURE_RUN(calld->next_recv_trailing_metadata_ready, error); } // Start transport stream op. @@ -198,10 +199,10 @@ static void start_transport_stream_op_batch( } // Inject callback for receiving trailing metadata. if (op->recv_trailing_metadata) { - calld->next_recv_trailing_metadata = + calld->next_recv_trailing_metadata_ready = op->payload->recv_trailing_metadata.recv_trailing_metadata_ready; op->payload->recv_trailing_metadata.recv_trailing_metadata_ready = - &calld->recv_trailing_metadata; + &calld->recv_trailing_metadata_ready; } // Chain to the next filter. grpc_call_next_op(elem, op); @@ -214,12 +215,13 @@ static grpc_error* init_call_elem(grpc_call_element* elem, call_data* calld = static_cast<call_data*>(elem->call_data); calld->call_combiner = args->call_combiner; calld->next_recv_message_ready = nullptr; - calld->next_recv_trailing_metadata = nullptr; + calld->next_recv_trailing_metadata_ready = nullptr; calld->error = GRPC_ERROR_NONE; GRPC_CLOSURE_INIT(&calld->recv_message_ready, recv_message_ready, elem, grpc_schedule_on_exec_ctx); - GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata, recv_trailing_metadata, - elem, grpc_schedule_on_exec_ctx); + GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready, + recv_trailing_metadata_ready, elem, + grpc_schedule_on_exec_ctx); // Get max sizes from channel data, then merge in per-method config values. // Note: Per-method config is only available on the client, so we // apply the max request size to the send limit and the max response |