|
|
|
@ -686,7 +686,6 @@ static void cancel_with_status(grpc_call* c, grpc_status_code status, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void set_final_status(grpc_call* call, grpc_error* error) { |
|
|
|
|
gpr_log(GPR_INFO, "set final status"); |
|
|
|
|
if (grpc_call_error_trace.enabled()) { |
|
|
|
|
gpr_log(GPR_DEBUG, "set_final_status %s", call->is_client ? "CLI" : "SVR"); |
|
|
|
|
gpr_log(GPR_DEBUG, "%s", grpc_error_string(error)); |
|
|
|
@ -1645,13 +1644,6 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops, |
|
|
|
|
call->send_extra_metadata_count = 1; |
|
|
|
|
call->send_extra_metadata[0].md = grpc_channel_get_reffed_status_elem( |
|
|
|
|
call->channel, op->data.send_status_from_server.status); |
|
|
|
|
if (op->data.send_status_from_server.status_details != nullptr) { |
|
|
|
|
call->send_extra_metadata[1].md = grpc_mdelem_from_slices( |
|
|
|
|
GRPC_MDSTR_GRPC_MESSAGE, |
|
|
|
|
grpc_slice_ref_internal( |
|
|
|
|
*op->data.send_status_from_server.status_details)); |
|
|
|
|
call->send_extra_metadata_count++; |
|
|
|
|
} |
|
|
|
|
grpc_error* status_error = |
|
|
|
|
op->data.send_status_from_server.status == GRPC_STATUS_OK |
|
|
|
|
? GRPC_ERROR_NONE |
|
|
|
@ -1661,6 +1653,22 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops, |
|
|
|
|
GRPC_ERROR_INT_GRPC_STATUS, |
|
|
|
|
static_cast<intptr_t>( |
|
|
|
|
op->data.send_status_from_server.status)); |
|
|
|
|
if (op->data.send_status_from_server.status_details != nullptr) { |
|
|
|
|
call->send_extra_metadata[1].md = grpc_mdelem_from_slices( |
|
|
|
|
GRPC_MDSTR_GRPC_MESSAGE, |
|
|
|
|
grpc_slice_ref_internal( |
|
|
|
|
*op->data.send_status_from_server.status_details)); |
|
|
|
|
call->send_extra_metadata_count++; |
|
|
|
|
if (status_error != GRPC_ERROR_NONE) { |
|
|
|
|
char* msg = grpc_slice_to_c_string( |
|
|
|
|
GRPC_MDVALUE(call->send_extra_metadata[1].md)); |
|
|
|
|
status_error = |
|
|
|
|
grpc_error_set_str(status_error, GRPC_ERROR_STR_GRPC_MESSAGE, |
|
|
|
|
grpc_slice_from_copied_string(msg)); |
|
|
|
|
gpr_free(msg); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
call->status_error = status_error; |
|
|
|
|
if (!prepare_application_metadata( |
|
|
|
|
call, |
|
|
|
|