Merge pull request #20329 from soheilhy/call-op-str

Avoid creating and copying strings when Status is OK in FinishOp.
reviewable/pr20406/r2
Soheil Hassas Yeganeh 6 years ago committed by GitHub
commit 20983f1e0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 30
      include/grpcpp/impl/codegen/call_op_set.h

@ -772,19 +772,23 @@ class CallOpClientRecvStatus {
void FinishOp(bool* /*status*/) { void FinishOp(bool* /*status*/) {
if (recv_status_ == nullptr || hijacked_) return; if (recv_status_ == nullptr || hijacked_) return;
grpc::string binary_error_details = metadata_map_->GetBinaryErrorDetails(); if (status_code_ == StatusCode::OK) {
*recv_status_ = *recv_status_ = Status();
Status(static_cast<StatusCode>(status_code_), GPR_CODEGEN_DEBUG_ASSERT(GRPC_SLICE_IS_EMPTY(error_message_));
GRPC_SLICE_IS_EMPTY(error_message_) GPR_CODEGEN_DEBUG_ASSERT(debug_error_string_ == nullptr);
? grpc::string() } else {
: grpc::string(GRPC_SLICE_START_PTR(error_message_), *recv_status_ =
GRPC_SLICE_END_PTR(error_message_)), Status(static_cast<StatusCode>(status_code_),
binary_error_details); GRPC_SLICE_IS_EMPTY(error_message_)
client_context_->set_debug_error_string( ? grpc::string()
debug_error_string_ != nullptr ? debug_error_string_ : ""); : grpc::string(GRPC_SLICE_START_PTR(error_message_),
g_core_codegen_interface->grpc_slice_unref(error_message_); GRPC_SLICE_END_PTR(error_message_)),
if (debug_error_string_ != nullptr) { metadata_map_->GetBinaryErrorDetails());
g_core_codegen_interface->gpr_free((void*)debug_error_string_); 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…
Cancel
Save