|  | @@ -117,8 +117,8 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      void Run() {
 | 
	
		
			
				|  |  | -      std::unique_ptr<google::protobuf::Message> req;
 | 
	
		
			
				|  |  | -      std::unique_ptr<google::protobuf::Message> res;
 | 
	
		
			
				|  |  | +      std::unique_ptr<grpc::protobuf::Message> req;
 | 
	
		
			
				|  |  | +      std::unique_ptr<grpc::protobuf::Message> res;
 | 
	
		
			
				|  |  |        if (has_request_payload_) {
 | 
	
		
			
				|  |  |          req.reset(method_->AllocateRequestProto());
 | 
	
		
			
				|  |  |          if (!DeserializeProto(request_payload_, req.get())) {
 | 
	
	
		
			
				|  | @@ -281,7 +281,7 @@ void Server::PerformOpsOnCall(CallOpBuffer* buf, Call* call) {
 | 
	
		
			
				|  |  |  class Server::AsyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  |   public:
 | 
	
		
			
				|  |  |    AsyncRequest(Server* server, void* registered_method, ServerContext* ctx,
 | 
	
		
			
				|  |  | -               ::google::protobuf::Message* request,
 | 
	
		
			
				|  |  | +               grpc::protobuf::Message* request,
 | 
	
		
			
				|  |  |                 ServerAsyncStreamingInterface* stream, CompletionQueue* cq,
 | 
	
		
			
				|  |  |                 void* tag)
 | 
	
		
			
				|  |  |        : tag_(tag),
 | 
	
	
		
			
				|  | @@ -307,6 +307,7 @@ class Server::AsyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE {
 | 
	
		
			
				|  |  |      *tag = tag_;
 | 
	
		
			
				|  |  | +    bool orig_status = *status;
 | 
	
		
			
				|  |  |      if (*status && request_) {
 | 
	
		
			
				|  |  |        if (payload_) {
 | 
	
		
			
				|  |  |          *status = DeserializeProto(payload_, request_);
 | 
	
	
		
			
				|  | @@ -326,7 +327,9 @@ class Server::AsyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      ctx_->call_ = call_;
 | 
	
		
			
				|  |  |      Call call(call_, server_, cq_);
 | 
	
		
			
				|  |  | -    ctx_->BeginCompletionOp(&call);
 | 
	
		
			
				|  |  | +    if (orig_status && call_) {
 | 
	
		
			
				|  |  | +      ctx_->BeginCompletionOp(&call);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      // just the pointers inside call are copied here
 | 
	
		
			
				|  |  |      stream_->BindCall(&call);
 | 
	
		
			
				|  |  |      delete this;
 | 
	
	
		
			
				|  | @@ -335,7 +338,7 @@ class Server::AsyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
		
			
				|  |  |    void* const tag_;
 | 
	
		
			
				|  |  | -  ::google::protobuf::Message* const request_;
 | 
	
		
			
				|  |  | +  grpc::protobuf::Message* const request_;
 | 
	
		
			
				|  |  |    ServerAsyncStreamingInterface* const stream_;
 | 
	
		
			
				|  |  |    CompletionQueue* const cq_;
 | 
	
		
			
				|  |  |    ServerContext* const ctx_;
 | 
	
	
		
			
				|  | @@ -347,7 +350,7 @@ class Server::AsyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void Server::RequestAsyncCall(void* registered_method, ServerContext* context,
 | 
	
		
			
				|  |  | -                              ::google::protobuf::Message* request,
 | 
	
		
			
				|  |  | +                              grpc::protobuf::Message* request,
 | 
	
		
			
				|  |  |                                ServerAsyncStreamingInterface* stream,
 | 
	
		
			
				|  |  |                                CompletionQueue* cq, void* tag) {
 | 
	
		
			
				|  |  |    new AsyncRequest(this, registered_method, context, request, stream, cq, tag);
 |