CallbackRequest is no longer reused, so remove relics to support reuse

pull/24184/head
Vijay Pai 4 years ago
parent b56b321943
commit d0bf9cedcc
  1. 59
      src/cpp/server/server_cc.cc

@ -547,11 +547,7 @@ class Server::CallbackRequest final
grpc::internal::RpcMethod::SERVER_STREAMING),
cq_(cq),
tag_(this) {
server->Ref();
Setup();
data->tag = &tag_;
data->call = &call_;
data->initial_metadata = &request_metadata_;
CommonSetup(server, data);
data->deadline = &deadline_;
data->optional_payload = has_request_payload_ ? &request_payload_ : nullptr;
}
@ -563,22 +559,20 @@ class Server::CallbackRequest final
: server_(server),
method_(nullptr),
has_request_payload_(false),
call_details_(new grpc_call_details),
cq_(cq),
tag_(this) {
server->Ref();
Setup();
data->tag = &tag_;
data->call = &call_;
data->initial_metadata = &request_metadata_;
if (!call_details_) {
call_details_ = new grpc_call_details;
grpc_call_details_init(call_details_);
}
CommonSetup(server, data);
grpc_call_details_init(call_details_);
data->details = call_details_;
}
~CallbackRequest() {
Clear();
delete call_details_;
grpc_metadata_array_destroy(&request_metadata_);
if (has_request_payload_ && request_payload_) {
grpc_byte_buffer_destroy(request_payload_);
}
server_->UnrefWithPossibleNotify();
}
@ -688,40 +682,27 @@ class Server::CallbackRequest final
}
};
void Clear() {
if (call_details_) {
delete call_details_;
call_details_ = nullptr;
}
grpc_metadata_array_destroy(&request_metadata_);
if (has_request_payload_ && request_payload_) {
grpc_byte_buffer_destroy(request_payload_);
}
ctx_.Clear();
interceptor_methods_.ClearState();
}
void Setup() {
template <class CallAllocation>
void CommonSetup(Server* server, CallAllocation* data) {
server->Ref();
grpc_metadata_array_init(&request_metadata_);
ctx_.Setup(gpr_inf_future(GPR_CLOCK_REALTIME));
request_payload_ = nullptr;
request_ = nullptr;
handler_data_ = nullptr;
request_status_ = grpc::Status();
data->tag = &tag_;
data->call = &call_;
data->initial_metadata = &request_metadata_;
}
Server* const server_;
grpc::internal::RpcServiceMethod* const method_;
const bool has_request_payload_;
grpc_byte_buffer* request_payload_;
void* request_;
void* handler_data_;
grpc_byte_buffer* request_payload_ = nullptr;
void* request_ = nullptr;
void* handler_data_ = nullptr;
grpc::Status request_status_;
grpc_call_details* call_details_ = nullptr;
grpc_call_details* const call_details_ = nullptr;
grpc_call* call_;
gpr_timespec deadline_;
grpc_metadata_array request_metadata_;
grpc::CompletionQueue* cq_;
grpc::CompletionQueue* const cq_;
CallbackCallTag tag_;
ServerContextType ctx_;
grpc::internal::InterceptorBatchMethodsImpl interceptor_methods_;

Loading…
Cancel
Save