From 47a573602a27e718a7f13d5a9cceed7519e42234 Mon Sep 17 00:00:00 2001 From: Craig Tiller <ctiller@google.com> Date: Wed, 11 Feb 2015 16:31:45 -0800 Subject: [PATCH] Fix ownership --- include/grpc++/impl/call.h | 10 +++------- src/cpp/common/call.cc | 4 ---- src/cpp/server/server.cc | 4 ++++ 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/include/grpc++/impl/call.h b/include/grpc++/impl/call.h index 5922e2581a..9ac92a00dd 100644 --- a/include/grpc++/impl/call.h +++ b/include/grpc++/impl/call.h @@ -112,11 +112,6 @@ class CallOpBuffer final : public CompletionQueueTag { grpc_metadata *trailing_metadata_ = nullptr; }; -class CCallDeleter { - public: - void operator()(grpc_call *c); -}; - // Channel and Server implement this to allow them to hook performing ops class CallHook { public: @@ -127,17 +122,18 @@ class CallHook { // Straightforward wrapping of the C call object class Call final { public: + /* call is owned by the caller */ Call(grpc_call *call, CallHook *call_hook_, CompletionQueue *cq); void PerformOps(CallOpBuffer *buffer); - grpc_call *call() { return call_.get(); } + grpc_call *call() { return call_; } CompletionQueue *cq() { return cq_; } private: CallHook *call_hook_; CompletionQueue *cq_; - std::unique_ptr<grpc_call, CCallDeleter> call_; + grpc_call* call_; }; } // namespace grpc diff --git a/src/cpp/common/call.cc b/src/cpp/common/call.cc index 6148855337..84791aa0a4 100644 --- a/src/cpp/common/call.cc +++ b/src/cpp/common/call.cc @@ -243,10 +243,6 @@ void CallOpBuffer::FinalizeResult(void **tag, bool *status) { } } -void CCallDeleter::operator()(grpc_call* c) { - grpc_call_destroy(c); -} - Call::Call(grpc_call* call, CallHook *call_hook, CompletionQueue* cq) : call_hook_(call_hook), cq_(cq), call_(call) {} diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 4392739367..2ee8581548 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -157,6 +157,10 @@ class Server::MethodRequestData final : public CompletionQueueTag { mrd->request_metadata_.count = 0; } + ~CallData() { + grpc_call_destroy(call_.call()); + } + void Run() { std::unique_ptr<google::protobuf::Message> req; std::unique_ptr<google::protobuf::Message> res; -- GitLab