From: Martin Hunt Date: Mon, 5 May 2008 19:02:39 +0000 (-0400) Subject: More signal cleanup. X-Git-Tag: release-0.7-rc1~184 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=5aee7bca54fce01fe97c8ca168695bfd53c16fda;p=systemtap.git More signal cleanup. --- diff --git a/runtime/staprun/ChangeLog b/runtime/staprun/ChangeLog index 14dac37dd..969c299df 100644 --- a/runtime/staprun/ChangeLog +++ b/runtime/staprun/ChangeLog @@ -2,6 +2,8 @@ * mainloop.c (child_proc): Handle sig_chld in the proper thread. + (signal_thread): Don't call send_request() + because it isn't thread-safe. 2008-05-05 Martin Hunt diff --git a/runtime/staprun/mainloop.c b/runtime/staprun/mainloop.c index de4479dd6..619637434 100644 --- a/runtime/staprun/mainloop.c +++ b/runtime/staprun/mainloop.c @@ -44,7 +44,7 @@ int send_request(int type, void *data, int len) static void *signal_thread(void *arg) { sigset_t *s = (sigset_t *) arg; - int signum; + int signum, rc, btype = STP_EXIT; while (1) { if (sigwait(s, &signum) < 0) { @@ -52,16 +52,11 @@ static void *signal_thread(void *arg) continue; } dbug(2, "sigproc %d (%s)\n", signum, strsignal(signum)); - if (signum == SIGCHLD) { - pid_t pid = waitpid(-1, NULL, WNOHANG); - if (pid == target_pid) { - send_request(STP_EXIT, NULL, 0); - break; - } - } else if (signum == SIGQUIT) + if (signum == SIGQUIT) cleanup_and_exit(1); else if (signum == SIGINT || signum == SIGHUP || signum == SIGTERM) { - send_request(STP_EXIT, NULL, 0); + // send STP_EXIT + rc = write(control_channel, &btype, sizeof(btype)); break; } }