|  | @@ -85,7 +85,7 @@ class CallOpSendInitialMetadata {
 | 
	
		
			
				|  |  |      op->data.send_initial_metadata.metadata = initial_metadata_;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    void FinishOp(bool* status, int max_message_size) {
 | 
	
		
			
				|  |  | -    // nothing to do
 | 
	
		
			
				|  |  | +    send_ = false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    bool send_;
 | 
	
	
		
			
				|  | @@ -109,6 +109,7 @@ class CallOpSendMessage {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    void FinishOp(bool* status, int max_message_size) {
 | 
	
		
			
				|  |  |      if (own_buf_) grpc_byte_buffer_destroy(send_buf_);
 | 
	
		
			
				|  |  | +    send_buf_ = nullptr;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
	
		
			
				|  | @@ -154,6 +155,7 @@ class CallOpRecvMessage {
 | 
	
		
			
				|  |  |        got_message = false;
 | 
	
		
			
				|  |  |        *status = false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    message_ = nullptr;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
	
		
			
				|  | @@ -198,10 +200,12 @@ class CallOpGenericRecvMessage {
 | 
	
		
			
				|  |  |        got_message = false;
 | 
	
		
			
				|  |  |        *status = false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    deserialize_ = DeserializeFunc();
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
		
			
				|  |  | -  std::function<Status(grpc_byte_buffer*, int)> deserialize_;
 | 
	
		
			
				|  |  | +  typedef std::function<Status(grpc_byte_buffer*, int)> DeserializeFunc;
 | 
	
		
			
				|  |  | +  DeserializeFunc deserialize_;
 | 
	
		
			
				|  |  |    grpc_byte_buffer* recv_buf_;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -217,7 +221,7 @@ class CallOpClientSendClose {
 | 
	
		
			
				|  |  |      ops[(*nops)++].op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    void FinishOp(bool* status, int max_message_size) {
 | 
	
		
			
				|  |  | -    // nothing to do
 | 
	
		
			
				|  |  | +    send_ = false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
	
		
			
				|  | @@ -251,7 +255,7 @@ class CallOpServerSendStatus {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    void FinishOp(bool* status, int max_message_size) {
 | 
	
		
			
				|  |  | -    // nothing to do
 | 
	
		
			
				|  |  | +    send_status_details_ = false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
	
		
			
				|  | @@ -281,7 +285,9 @@ class CallOpRecvInitialMetadata {
 | 
	
		
			
				|  |  |      op->data.recv_initial_metadata = &recv_initial_metadata_arr_;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    void FinishOp(bool* status, int max_message_size) {
 | 
	
		
			
				|  |  | +    if (recv_initial_metadata_ == nullptr) return;
 | 
	
		
			
				|  |  |      FillMetadataMap(&recv_initial_metadata_arr_, recv_initial_metadata_);
 | 
	
		
			
				|  |  | +    recv_initial_metadata_ = nullptr;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
	
		
			
				|  | @@ -312,10 +318,12 @@ class CallOpClientRecvStatus {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    void FinishOp(bool* status, int max_message_size) {
 | 
	
		
			
				|  |  | +    if (recv_status_ == nullptr) return;
 | 
	
		
			
				|  |  |      FillMetadataMap(&recv_trailing_metadata_arr_, recv_trailing_metadata_);
 | 
	
		
			
				|  |  |      *recv_status_ = Status(
 | 
	
		
			
				|  |  |          static_cast<StatusCode>(status_code_),
 | 
	
		
			
				|  |  |          status_details_ ? grpc::string(status_details_) : grpc::string());
 | 
	
		
			
				|  |  | +    recv_status_ = nullptr;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 |