Repository: trafficserver
Updated Branches:
  refs/heads/master 37569c139 -> 3ea9ccc30


TS-3618: Crashes in traffic_cop on shutdown / restart


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/591984cf
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/591984cf
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/591984cf

Branch: refs/heads/master
Commit: 591984cf0a288d0ac51c5d49fed7faf1f07d2a9f
Parents: 37569c1
Author: Brian Geffon <bri...@apache.org>
Authored: Mon May 18 19:46:38 2015 -0700
Committer: Brian Geffon <bri...@apache.org>
Committed: Mon May 18 19:46:38 2015 -0700

----------------------------------------------------------------------
 cmd/traffic_cop/traffic_cop.cc | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/591984cf/cmd/traffic_cop/traffic_cop.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_cop/traffic_cop.cc b/cmd/traffic_cop/traffic_cop.cc
index 1a9ebad..a535cdf 100644
--- a/cmd/traffic_cop/traffic_cop.cc
+++ b/cmd/traffic_cop/traffic_cop.cc
@@ -81,6 +81,7 @@ static int coresig = 0;
 static int debug_flag = false;
 static int stdout_flag = false;
 static int stop_flag = false;
+static volatile int sig_term_received = 0;
 
 static char *admin_user;
 static uid_t admin_uid;
@@ -271,7 +272,7 @@ sig_term(int signum)
     child_status = status;
   }
   cop_log_trace("Leaving sig_term(%d), exiting traffic_cop\n", signum);
-  exit(0);
+  sig_term_received = 1;
 }
 
 static void
@@ -828,7 +829,15 @@ poll_read_or_write(int fd, int timeout, int inorout)
   info.revents = 0;
 
   do {
+    if (sig_term_received) {
+          exit(0);
+    }
+
     err = poll(&info, 1, timeout);
+
+    if (sig_term_received) {
+      exit(0);
+    }
   } while ((err < 0) && (transient_error(errno, TRANSIENT_ERROR_WAIT_MS)));
 
   if ((err > 0) && (info.revents & inorout)) {

Reply via email to