From 467d7bd414238427c051a44316d64d267c068ea3 Mon Sep 17 00:00:00 2001
From: Yang Gao <yangg@google.com>
Date: Tue, 17 Feb 2015 12:08:43 -0800
Subject: [PATCH] When the entire op fails, the recv_message is always
 discarded.

---
 src/cpp/common/call.cc   | 2 +-
 src/cpp/server/server.cc | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/cpp/common/call.cc b/src/cpp/common/call.cc
index 0922a6e460..70daa6a3b0 100644
--- a/src/cpp/common/call.cc
+++ b/src/cpp/common/call.cc
@@ -256,7 +256,7 @@ void CallOpBuffer::FinalizeResult(void** tag, bool* status) {
   if (recv_message_) {
     if (recv_message_buf_) {
       got_message = true;
-      *status &= DeserializeProto(recv_message_buf_, recv_message_);
+      *status = *status && DeserializeProto(recv_message_buf_, recv_message_);
       grpc_byte_buffer_destroy(recv_message_buf_);
       recv_message_buf_ = nullptr;
     } else {
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index 35ced54aa7..ee9a1daa8e 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -314,7 +314,7 @@ class Server::AsyncRequest final : public CompletionQueueTag {
     *tag = tag_;
     if (*status && request_) {
       if (payload_) {
-        *status &= DeserializeProto(payload_, request_);
+        *status = *status && DeserializeProto(payload_, request_);
       } else {
         *status = false;
       }
-- 
GitLab