From 98a99cd3da5bc665e07a8f07b4b89815e89b8aa0 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Thu, 15 May 2008 11:25:59 -0400 Subject: Add appropriate ChangeLog entry for earlier checkin. --- testsuite/systemtap.examples/ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/testsuite/systemtap.examples/ChangeLog b/testsuite/systemtap.examples/ChangeLog index 8d8c2ca1..41b70135 100644 --- a/testsuite/systemtap.examples/ChangeLog +++ b/testsuite/systemtap.examples/ChangeLog @@ -1,3 +1,9 @@ +2008-05-09 William Cohen + + * syscalls_by_pid.meta, syscalls_by_proc.meta: + * sigmon.meta, sig_by_pid.meta, sig_by_proc.meta: + * socket-trace.meta: New. + 2008-05-08 William Cohen * iotime.meta: New. -- cgit From 3972b443751ef6d0a441bae53ffa57d8a798aee4 Mon Sep 17 00:00:00 2001 From: David Smith Date: Thu, 15 May 2008 15:52:12 -0500 Subject: Ignores signals when removing the temporary directory. 2008-05-15 David Smith * main.cxx (setup_signals): New function. (main): Calls setup_signals() to setup signal handling. When removing the temporary directory, ignore signals. --- ChangeLog | 6 ++++++ main.cxx | 33 +++++++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 13f6254e..005af837 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-05-15 David Smith + + * main.cxx (setup_signals): New function. + (main): Calls setup_signals() to setup signal handling. When + removing the temporary directory, ignore signals. + 2008-05-13 Ananth N Mavinakayanahalli PR 5955. * parse.cxx (parser::parse_global): accept ";" terminated globals diff --git a/main.cxx b/main.cxx index 2a1c0dfb..eadbd694 100644 --- a/main.cxx +++ b/main.cxx @@ -261,6 +261,30 @@ void handle_interrupt (int /* sig */) } +void +setup_signals (sighandler_t handler) +{ + struct sigaction sa; + + sa.sa_handler = handler; + sigemptyset (&sa.sa_mask); + if (handler != SIG_IGN) + { + sigaddset (&sa.sa_mask, SIGHUP); + sigaddset (&sa.sa_mask, SIGPIPE); + sigaddset (&sa.sa_mask, SIGINT); + sigaddset (&sa.sa_mask, SIGTERM); + } + sa.sa_flags = 0; + sa.sa_restorer = NULL; + + sigaction (SIGHUP, &sa, NULL); + sigaction (SIGPIPE, &sa, NULL); + sigaction (SIGINT, &sa, NULL); + sigaction (SIGTERM, &sa, NULL); +} + + int main (int argc, char * const argv []) { @@ -698,10 +722,7 @@ main (int argc, char * const argv []) // Set up our handler to catch routine signals, to allow clean // and reasonably timely exit. - signal (SIGHUP, handle_interrupt); - signal (SIGPIPE, handle_interrupt); - signal (SIGINT, handle_interrupt); - signal (SIGTERM, handle_interrupt); + setup_signals(&handle_interrupt); struct tms tms_before; times (& tms_before); @@ -1022,6 +1043,10 @@ pass_5: clog << "Keeping temporary directory \"" << s.tmpdir << "\"" << endl; else { + // Ignore signals while we're deleting the temporary directory. + setup_signals (SIG_IGN); + + // Remove the temporary directory. string cleanupcmd = "rm -rf "; cleanupcmd += s.tmpdir; if (s.verbose>1) clog << "Running " << cleanupcmd << endl; -- cgit