diff options
author | Lennart Poettering <lennart@poettering.net> | 2004-02-08 20:17:39 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2004-02-08 20:17:39 +0000 |
commit | fff36c813f28c8fee1904e3bfa032565f4db1024 (patch) | |
tree | 6b3fe74eb097edeb9bc8c861704364a0190571fc | |
parent | 74229094319e534c8c3ccef9ec842ae71b75b4b8 (diff) |
Signal fixes
git-svn-id: file:///home/lennart/svn/public/libdaemon/trunk@56 153bfa13-eec0-0310-be40-b0cb6a0e1b4b
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | doc/README.html.in | 3 | ||||
-rw-r--r-- | src/dfork.c | 4 | ||||
-rw-r--r-- | src/dsignal.c | 18 |
4 files changed, 24 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac index e9a6fc0..0a73646 100644 --- a/configure.ac +++ b/configure.ac @@ -20,7 +20,7 @@ # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. AC_PREREQ(2.59) -AC_INIT([libdaemon],[0.4],[mzqnrzba (at) 0pointer (dot) de]) +AC_INIT([libdaemon],[0.5],[mzqnrzba (at) 0pointer (dot) de]) AC_CONFIG_SRCDIR([src/dfork.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([foreign -Wall]) diff --git a/doc/README.html.in b/doc/README.html.in index 78cc2ba..1632e38 100644 --- a/doc/README.html.in +++ b/doc/README.html.in @@ -42,6 +42,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</p> <h2><a name="news">News</a></h2> +<div class="news-date">Sun Feb 8 2004: </div> +<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.5.tar.gz">Version 0.5</a> released; changes include: signal handling fix.</p> + <div class="news-date">Sat Jan 10 2004: </div> <p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.4.tar.gz">Version 0.4</a> released; changes include: new module <tt>dexec.c</tt>; added <tt>pkg-config</tt> support.</p> 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; } |