diff --git a/include/grpcpp/impl/codegen/message_allocator.h b/include/grpcpp/impl/codegen/message_allocator.h index c3054313864..422f8c2ea21 100644 --- a/include/grpcpp/impl/codegen/message_allocator.h +++ b/include/grpcpp/impl/codegen/message_allocator.h @@ -42,8 +42,10 @@ class MessageHolder : public RpcAllocatorState { virtual void Release() { delete this; } RequestT* request() { return request_; } ResponseT* response() { return response_; } + void set_request(RequestT* request) { request_ = request; } + void set_response(ResponseT* response) { response_ = response; } - protected: + private: // NOTE: subclasses should set these pointers. RequestT* request_; ResponseT* response_; diff --git a/include/grpcpp/impl/codegen/server_callback.h b/include/grpcpp/impl/codegen/server_callback.h index 62cdd452308..9254518b605 100644 --- a/include/grpcpp/impl/codegen/server_callback.h +++ b/include/grpcpp/impl/codegen/server_callback.h @@ -82,8 +82,8 @@ class DefaultMessageHolder : public experimental::MessageHolder { public: DefaultMessageHolder() { - this->request_ = &request_obj_; - this->response_ = &response_obj_; + this->set_request(&request_obj_); + this->set_response(&response_obj_); } void Release() override { // the object is allocated in the call arena. diff --git a/test/cpp/end2end/message_allocator_end2end_test.cc b/test/cpp/end2end/message_allocator_end2end_test.cc index b4ed1d47f8f..2abe26fe825 100644 --- a/test/cpp/end2end/message_allocator_end2end_test.cc +++ b/test/cpp/end2end/message_allocator_end2end_test.cc @@ -233,24 +233,24 @@ class SimpleAllocatorTest : public MessageAllocatorEnd2endTestBase { int* messages_deallocation_count) : request_deallocation_count_(request_deallocation_count), messages_deallocation_count_(messages_deallocation_count) { - request_ = new EchoRequest; - response_ = new EchoResponse; + set_request(new EchoRequest); + set_response(new EchoResponse); } void Release() override { (*messages_deallocation_count_)++; - delete request_; - delete response_; + delete request(); + delete response(); delete this; } void FreeRequest() override { (*request_deallocation_count_)++; - delete request_; - request_ = nullptr; + delete request(); + set_request(nullptr); } EchoRequest* ReleaseRequest() { - auto* ret = request_; - request_ = nullptr; + auto* ret = request(); + set_request(nullptr); return ret; } @@ -341,9 +341,10 @@ class ArenaAllocatorTest : public MessageAllocatorEnd2endTestBase { : public experimental::MessageHolder { public: MessageHolderImpl() { - request_ = google::protobuf::Arena::CreateMessage(&arena_); - response_ = - google::protobuf::Arena::CreateMessage(&arena_); + set_request( + google::protobuf::Arena::CreateMessage(&arena_)); + set_response( + google::protobuf::Arena::CreateMessage(&arena_)); } void FreeRequest() override { GPR_ASSERT(0); }