diff options
author | David Smith <dsmith@redhat.com> | 2008-05-15 15:52:12 -0500 |
---|---|---|
committer | David Smith <dsmith@redhat.com> | 2008-05-15 15:54:07 -0500 |
commit | 3972b443751ef6d0a441bae53ffa57d8a798aee4 (patch) | |
tree | cbfa0870bc62c838205524dd012d0b9e01490045 /main.cxx | |
parent | 98a99cd3da5bc665e07a8f07b4b89815e89b8aa0 (diff) | |
download | systemtap-steved-3972b443751ef6d0a441bae53ffa57d8a798aee4.tar.gz systemtap-steved-3972b443751ef6d0a441bae53ffa57d8a798aee4.tar.xz systemtap-steved-3972b443751ef6d0a441bae53ffa57d8a798aee4.zip |
Ignores signals when removing the temporary directory.
2008-05-15 David Smith <dsmith@redhat.com>
* main.cxx (setup_signals): New function.
(main): Calls setup_signals() to setup signal handling. When
removing the temporary directory, ignore signals.
Diffstat (limited to 'main.cxx')
-rw-r--r-- | main.cxx | 33 |
1 files changed, 29 insertions, 4 deletions
@@ -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; |