aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Vijay Pai <vpai@google.com>2018-10-19 20:22:58 -0700
committerGravatar GitHub <noreply@github.com>2018-10-19 20:22:58 -0700
commit340bffa55560f02944dd81413aa764081a60f329 (patch)
tree501152a80ad403bbbe46f553256f6c184fd9c4df
parent397f20742f553aa258bb303e470b62fbb9cc288b (diff)
parentce4bd108ea18891836eb6372da404446ef1a1932 (diff)
Merge pull request #16950 from vjpai/membug2
Fix CallOpSet copy/assignment to reset cq_tag
-rw-r--r--include/grpcpp/impl/codegen/call.h13
-rw-r--r--src/cpp/server/server_cc.cc4
2 files changed, 15 insertions, 2 deletions
diff --git a/include/grpcpp/impl/codegen/call.h b/include/grpcpp/impl/codegen/call.h
index 7cadea0055..789ea805a3 100644
--- a/include/grpcpp/impl/codegen/call.h
+++ b/include/grpcpp/impl/codegen/call.h
@@ -624,6 +624,19 @@ class CallOpSet : public CallOpSetInterface,
public Op6 {
public:
CallOpSet() : cq_tag_(this), return_tag_(this), call_(nullptr) {}
+
+ // The copy constructor and assignment operator reset the value of
+ // cq_tag_ and return_tag_ since those are only meaningful on a specific
+ // object, not across objects.
+ CallOpSet(const CallOpSet& other)
+ : cq_tag_(this), return_tag_(this), call_(other.call_) {}
+ CallOpSet& operator=(const CallOpSet& other) {
+ cq_tag_ = this;
+ return_tag_ = this;
+ call_ = other.call_;
+ return *this;
+ }
+
void FillOps(grpc_call* call, grpc_op* ops, size_t* nops) override {
this->Op1::AddOp(ops, nops);
this->Op2::AddOp(ops, nops);
diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc
index 373a925059..7aeddff643 100644
--- a/src/cpp/server/server_cc.cc
+++ b/src/cpp/server/server_cc.cc
@@ -685,8 +685,8 @@ void Server::PerformOpsOnCall(internal::CallOpSetInterface* ops,
size_t nops = 0;
grpc_op cops[MAX_OPS];
ops->FillOps(call->call(), cops, &nops);
- // TODO(vjpai): Use ops->cq_tag once this case supports callbacks
- auto result = grpc_call_start_batch(call->call(), cops, nops, ops, nullptr);
+ auto result =
+ grpc_call_start_batch(call->call(), cops, nops, ops->cq_tag(), nullptr);
if (result != GRPC_CALL_OK) {
gpr_log(GPR_ERROR, "Fatal: grpc_call_start_batch returned %d", result);
grpc_call_log_batch(__FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR,