From 2f3e2ec86562e9894eda5f4422254713defa9367 Mon Sep 17 00:00:00 2001
From: Craig Tiller <craig.tiller@gmail.com>
Date: Fri, 20 Feb 2015 13:07:50 -0800
Subject: [PATCH] Make interop server respond to sigint

This will allow the test to shut down cleanly, and avoid failing.
---
 test/cpp/interop/server.cc | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/test/cpp/interop/server.cc b/test/cpp/interop/server.cc
index 4869d4df52..263bd8e304 100644
--- a/test/cpp/interop/server.cc
+++ b/test/cpp/interop/server.cc
@@ -35,6 +35,8 @@
 #include <sstream>
 #include <thread>
 
+#include <signal.h>
+
 #include <gflags/gflags.h>
 #include <grpc/grpc.h>
 #include <grpc/support/log.h>
@@ -80,6 +82,8 @@ namespace gflags { }
 using namespace google;
 using namespace gflags;
 
+static bool got_sigint = false;
+
 bool SetPayload(PayloadType type, int size, Payload* payload) {
   PayloadType response_type = type;
   // TODO(yangg): Support UNCOMPRESSABLE payload.
@@ -217,14 +221,17 @@ void RunServer() {
   }
   std::unique_ptr<Server> server(builder.BuildAndStart());
   gpr_log(GPR_INFO, "Server listening on %s", server_address.str().c_str());
-  while (true) {
+  while (!got_sigint) {
     std::this_thread::sleep_for(std::chrono::seconds(5));
   }
 }
 
+static void sigint_handler(int x) { got_sigint = true; }
+
 int main(int argc, char** argv) {
   grpc_init();
   ParseCommandLineFlags(&argc, &argv, true);
+  signal(SIGINT, sigint_handler);
 
   GPR_ASSERT(FLAGS_port != 0);
   RunServer();
-- 
GitLab