summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-02-08 20:17:39 +0000
committerLennart Poettering <lennart@poettering.net>2004-02-08 20:17:39 +0000
commitfff36c813f28c8fee1904e3bfa032565f4db1024 (patch)
tree6b3fe74eb097edeb9bc8c861704364a0190571fc /src
parent74229094319e534c8c3ccef9ec842ae71b75b4b8 (diff)
Signal fixes
git-svn-id: file:///home/lennart/svn/public/libdaemon/trunk@56 153bfa13-eec0-0310-be40-b0cb6a0e1b4b
Diffstat (limited to 'src')
-rw-r--r--src/dfork.c4
-rw-r--r--src/dsignal.c18
2 files changed, 20 insertions, 2 deletions
diff --git a/src/dfork.c b/src/dfork.c
index f9e10fb..2d959c9 100644
--- a/src/dfork.c
+++ b/src/dfork.c
@@ -103,7 +103,6 @@ pid_t daemon_fork(void) {
fwrite(&p, sizeof(p), 1, pipe_in);
fclose(pipe_in);
-
if (daemon_log_use & DAEMON_LOG_AUTO)
daemon_log_use = DAEMON_LOG_SYSLOG;
@@ -121,6 +120,9 @@ pid_t daemon_fork(void) {
exit(0);
} else { // First father
+
+ fclose(pipe_in);
+
if (fread(&p, sizeof(p), 1, pipe_out) != 1)
p = (pid_t) -1;
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;
}