Fix ownership
diff --git a/include/grpc++/impl/call.h b/include/grpc++/impl/call.h
index 5922e25..9ac92a0 100644
--- a/include/grpc++/impl/call.h
+++ b/include/grpc++/impl/call.h
@@ -112,11 +112,6 @@
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 @@
// 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 6148855..84791aa 100644
--- a/src/cpp/common/call.cc
+++ b/src/cpp/common/call.cc
@@ -243,10 +243,6 @@
}
}
-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 4392739..2ee8581 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -157,6 +157,10 @@
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;