resolve conflict
diff --git a/include/grpc++/impl/call.h b/include/grpc++/impl/call.h
index 7aa22ee..af1c710 100644
--- a/include/grpc++/impl/call.h
+++ b/include/grpc++/impl/call.h
@@ -68,7 +68,7 @@
   void AddRecvInitialMetadata(
       std::multimap<grpc::string, grpc::string> *metadata);
   void AddSendMessage(const google::protobuf::Message &message);
-  void AddRecvMessage(google::protobuf::Message *message, bool* got_message);
+  void AddRecvMessage(google::protobuf::Message *message);
   void AddClientSendClose();
   void AddClientRecvStatus(std::multimap<grpc::string, grpc::string> *metadata,
                            Status *status);
@@ -84,6 +84,7 @@
   // Called by completion queue just prior to returning from Next() or Pluck()
   void FinalizeResult(void **tag, bool *status) override;
 
+  bool got_message = false;
  private:
   void *return_tag_ = nullptr;
   // Send initial metadata
@@ -98,7 +99,6 @@
   grpc_byte_buffer* send_message_buf_ = nullptr;
   // Recv message
   google::protobuf::Message* recv_message_ = nullptr;
-  bool* got_message_ = nullptr;
   grpc_byte_buffer* recv_message_buf_ = nullptr;
   // Client send close
   bool client_send_close_ = false;
diff --git a/include/grpc++/stream.h b/include/grpc++/stream.h
index 359a272..ecc28f6 100644
--- a/include/grpc++/stream.h
+++ b/include/grpc++/stream.h
@@ -119,10 +119,9 @@
       buf.AddRecvInitialMetadata(&context_->recv_initial_metadata_);
       context_->initial_metadata_received_ = true;
     }
-    bool got_message;
-    buf.AddRecvMessage(msg, &got_message);
+    buf.AddRecvMessage(msg);
     call_.PerformOps(&buf);
-    return cq_.Pluck(&buf) && got_message;
+    return cq_.Pluck(&buf) && buf.got_message;
   }
 
   virtual Status Finish() override {
@@ -174,11 +173,10 @@
   virtual Status Finish() override {
     CallOpBuffer buf;
     Status status;
-    bool got_message;
-    buf.AddRecvMessage(response_, &got_message);
+    buf.AddRecvMessage(response_);
     buf.AddClientRecvStatus(&context_->trailing_metadata_, &status);
     call_.PerformOps(&buf);
-    GPR_ASSERT(cq_.Pluck(&buf) && got_message);
+    GPR_ASSERT(cq_.Pluck(&buf) && buf.got_message);
     return status;
   }
 
@@ -225,10 +223,9 @@
       buf.AddRecvInitialMetadata(&context_->recv_initial_metadata_);
       context_->initial_metadata_received_ = true;
     }
-    bool got_message;
-    buf.AddRecvMessage(msg, &got_message);
+    buf.AddRecvMessage(msg);
     call_.PerformOps(&buf);
-    return cq_.Pluck(&buf) && got_message;
+    return cq_.Pluck(&buf) && buf.got_message;
   }
 
   virtual bool Write(const W& msg) override {
@@ -277,10 +274,9 @@
 
   virtual bool Read(R* msg) override {
     CallOpBuffer buf;
-    bool got_message;
-    buf.AddRecvMessage(msg, &got_message);
+    buf.AddRecvMessage(msg);
     call_->PerformOps(&buf);
-    return call_->cq()->Pluck(&buf) && got_message;
+    return call_->cq()->Pluck(&buf) && buf.got_message;
   }
 
  private:
@@ -338,10 +334,9 @@
 
   virtual bool Read(R* msg) override {
     CallOpBuffer buf;
-    bool got_message;
-    buf.AddRecvMessage(msg, &got_message);
+    buf.AddRecvMessage(msg);
     call_->PerformOps(&buf);
-    return call_->cq()->Pluck(&buf) && got_message;
+    return call_->cq()->Pluck(&buf) && buf.got_message;
   }
 
   virtual bool Write(const W& msg) override {
@@ -420,8 +415,7 @@
       read_buf_.AddRecvInitialMetadata(&context_->recv_initial_metadata_);
       context_->initial_metadata_received_ = true;
     }
-    bool ignore;
-    read_buf_.AddRecvMessage(msg, &ignore);
+    read_buf_.AddRecvMessage(msg);
     call_.PerformOps(&read_buf_);
   }
 
@@ -485,8 +479,7 @@
       finish_buf_.AddRecvInitialMetadata(&context_->recv_initial_metadata_);
       context_->initial_metadata_received_ = true;
     }
-    bool ignore;
-    finish_buf_.AddRecvMessage(response_, &ignore);
+    finish_buf_.AddRecvMessage(response_);
     finish_buf_.AddClientRecvStatus(&context_->trailing_metadata_, status);
     call_.PerformOps(&finish_buf_);
   }
@@ -494,7 +487,6 @@
  private:
   ClientContext* context_ = nullptr;
   google::protobuf::Message *const response_;
-  bool got_message_;
   Call call_;
   CallOpBuffer init_buf_;
   CallOpBuffer meta_buf_;
@@ -532,8 +524,7 @@
       read_buf_.AddRecvInitialMetadata(&context_->recv_initial_metadata_);
       context_->initial_metadata_received_ = true;
     }
-    bool ignore;
-    read_buf_.AddRecvMessage(msg, &ignore);
+    read_buf_.AddRecvMessage(msg);
     call_.PerformOps(&read_buf_);
   }
 
diff --git a/src/cpp/client/client_unary_call.cc b/src/cpp/client/client_unary_call.cc
index b6bd81d..d68d7a9 100644
--- a/src/cpp/client/client_unary_call.cc
+++ b/src/cpp/client/client_unary_call.cc
@@ -53,21 +53,18 @@
   buf.AddSendInitialMetadata(context);
   buf.AddSendMessage(request);
   buf.AddRecvInitialMetadata(&context->recv_initial_metadata_);
-  bool got_message;
-  buf.AddRecvMessage(result, &got_message);
+  buf.AddRecvMessage(result);
   buf.AddClientSendClose();
   buf.AddClientRecvStatus(&context->trailing_metadata_, &status);
   call.PerformOps(&buf);
-  GPR_ASSERT(cq.Pluck(&buf) && (got_message || !status.IsOk()));
+  GPR_ASSERT(cq.Pluck(&buf) && (buf.got_message || !status.IsOk()));
   return status;
 }
 
 class ClientAsyncRequest final : public CallOpBuffer {
  public:
-  bool got_message = false;
   void FinalizeResult(void** tag, bool* status) override {
     CallOpBuffer::FinalizeResult(tag, status);
-    *status &= got_message;
     delete this;
   }
 };
@@ -83,7 +80,7 @@
   buf->AddSendInitialMetadata(context);
   buf->AddSendMessage(request);
   buf->AddRecvInitialMetadata(&context->recv_initial_metadata_);
-  buf->AddRecvMessage(result, &buf->got_message);
+  buf->AddRecvMessage(result);
   buf->AddClientSendClose();
   buf->AddClientRecvStatus(&context->trailing_metadata_, status);
   call.PerformOps(buf);
diff --git a/src/cpp/common/call.cc b/src/cpp/common/call.cc
index d706ec4..fe8859d 100644
--- a/src/cpp/common/call.cc
+++ b/src/cpp/common/call.cc
@@ -57,7 +57,7 @@
   }
 
   recv_message_ = nullptr;
-  got_message_ = nullptr;
+  got_message = false;
   if (recv_message_buf_) {
     grpc_byte_buffer_destroy(recv_message_buf_);
     recv_message_buf_ = nullptr;
@@ -142,9 +142,8 @@
   send_message_ = &message;
 }
 
-void CallOpBuffer::AddRecvMessage(google::protobuf::Message *message, bool* got_message) {
+void CallOpBuffer::AddRecvMessage(google::protobuf::Message *message) {
   recv_message_ = message;
-  got_message_ = got_message;
 }
 
 void CallOpBuffer::AddClientSendClose() {
@@ -256,12 +255,14 @@
   // Parse received message if any.
   if (recv_message_) {
     if (recv_message_buf_) {
-      *got_message_ = true;
+      got_message = true;
       *status = DeserializeProto(recv_message_buf_, recv_message_);
       grpc_byte_buffer_destroy(recv_message_buf_);
       recv_message_buf_ = nullptr;
     } else {
-      *got_message_ = false;
+      // Read failed
+      got_message = false;
+      *status = false;
     }
   }
   // Parse received status.