diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index b7128da8c4fc3bffd13bfab3bcc951d5dc383212..93384516302a070c804c30e8bd8a7fe0a53c719f 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -127,7 +127,9 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag {
         GRPC_TIMER_BEGIN(GRPC_PTAG_PROTO_DESERIALIZE, call_.call());
         req.reset(method_->AllocateRequestProto());
         if (!DeserializeProto(request_payload_, req.get(), call_.max_message_size())) {
-          abort();  // for now
+          // FIXME(yangg) deal with deserialization failure
+          cq_.Shutdown();
+          return;
         }
         GRPC_TIMER_END(GRPC_PTAG_PROTO_DESERIALIZE, call_.call());
       }