From fff36c813f28c8fee1904e3bfa032565f4db1024 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 8 Feb 2004 20:17:39 +0000 Subject: Signal fixes git-svn-id: file:///home/lennart/svn/public/libdaemon/trunk@56 153bfa13-eec0-0310-be40-b0cb6a0e1b4b --- src/dsignal.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/dsignal.c') diff --git a/src/dsignal.c b/src/dsignal.c index c41aa9d..3df2733 100644 --- a/src/dsignal.c +++ b/src/dsignal.c @@ -52,18 +52,34 @@ static int _init(void) { } int daemon_signal_install(int s){ + sigset_t sigset; struct sigaction sa; if (_init() < 0) return -1; + if (sigemptyset(&sigset) < 0) { + daemon_log(LOG_ERR, "sigemptyset(): %s", strerror(errno)); + return -1; + } + + if (sigaddset(&sigset, s) < 0) { + daemon_log(LOG_ERR, "sigaddyset(): %s", strerror(errno)); + return -1; + } + + if (sigprocmask(SIG_UNBLOCK, &sigset, NULL) < 0) { + daemon_log(LOG_ERR, "sigprocmask(): %s", strerror(errno)); + return -1; + } + memset(&sa, 0, sizeof(sa)); sa.sa_handler = _sigfunc; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; if (sigaction(s, &sa, NULL) < 0) { - daemon_log(LOG_ERR, "sigaction(%s, ...) failed.", strsignal(s)); + daemon_log(LOG_ERR, "sigaction(%s, ...) failed: %s", strsignal(s), strerror(errno)); return -1; } -- cgit