Fix ownership

pull/501/head
Craig Tiller 10 years ago
parent 0ef1a92818
commit 47a573602a
  1. 10
      include/grpc++/impl/call.h
  2. 4
      src/cpp/common/call.cc
  3. 4
      src/cpp/server/server.cc

@ -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

@ -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) {}

@ -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;

Loading…
Cancel
Save