summaryrefslogtreecommitdiffstats
path: root/main.cxx
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-05-16 11:04:30 -0400
committerFrank Ch. Eigler <fche@elastic.org>2008-05-16 11:04:30 -0400
commit29f04ba18bbff32225559ee93463eb0f9e16bf6a (patch)
tree7762156a510bf5e712bf44116c3e8071ab41c161 /main.cxx
parentf4da2654099dc4e8bcabe15519078db9ca7650a4 (diff)
parent3972b443751ef6d0a441bae53ffa57d8a798aee4 (diff)
downloadsystemtap-steved-29f04ba18bbff32225559ee93463eb0f9e16bf6a.tar.gz
systemtap-steved-29f04ba18bbff32225559ee93463eb0f9e16bf6a.tar.xz
systemtap-steved-29f04ba18bbff32225559ee93463eb0f9e16bf6a.zip
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
* 'master' of ssh://sources.redhat.com/git/systemtap: Ignores signals when removing the temporary directory. Add appropriate ChangeLog entry for earlier checkin.
Diffstat (limited to 'main.cxx')
-rw-r--r--main.cxx33
1 files changed, 29 insertions, 4 deletions
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;