Merge pull request #20329 from soheilhy/call-op-str
Avoid creating and copying strings when Status is OK in FinishOp.
This commit is contained in:
commit
20983f1e0e
|
|
@ -772,19 +772,23 @@ class CallOpClientRecvStatus {
|
|||
|
||||
void FinishOp(bool* /*status*/) {
|
||||
if (recv_status_ == nullptr || hijacked_) return;
|
||||
grpc::string binary_error_details = metadata_map_->GetBinaryErrorDetails();
|
||||
*recv_status_ =
|
||||
Status(static_cast<StatusCode>(status_code_),
|
||||
GRPC_SLICE_IS_EMPTY(error_message_)
|
||||
? grpc::string()
|
||||
: grpc::string(GRPC_SLICE_START_PTR(error_message_),
|
||||
GRPC_SLICE_END_PTR(error_message_)),
|
||||
binary_error_details);
|
||||
client_context_->set_debug_error_string(
|
||||
debug_error_string_ != nullptr ? debug_error_string_ : "");
|
||||
g_core_codegen_interface->grpc_slice_unref(error_message_);
|
||||
if (debug_error_string_ != nullptr) {
|
||||
g_core_codegen_interface->gpr_free((void*)debug_error_string_);
|
||||
if (status_code_ == StatusCode::OK) {
|
||||
*recv_status_ = Status();
|
||||
GPR_CODEGEN_DEBUG_ASSERT(GRPC_SLICE_IS_EMPTY(error_message_));
|
||||
GPR_CODEGEN_DEBUG_ASSERT(debug_error_string_ == nullptr);
|
||||
} else {
|
||||
*recv_status_ =
|
||||
Status(static_cast<StatusCode>(status_code_),
|
||||
GRPC_SLICE_IS_EMPTY(error_message_)
|
||||
? grpc::string()
|
||||
: grpc::string(GRPC_SLICE_START_PTR(error_message_),
|
||||
GRPC_SLICE_END_PTR(error_message_)),
|
||||
metadata_map_->GetBinaryErrorDetails());
|
||||
g_core_codegen_interface->grpc_slice_unref(error_message_);
|
||||
if (debug_error_string_ != nullptr) {
|
||||
client_context_->set_debug_error_string(debug_error_string_);
|
||||
g_core_codegen_interface->gpr_free((void*)debug_error_string_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue