diff --git a/block.c b/block.c index c24fb0a1..776071ed 100644 --- a/block.c +++ b/block.c @@ -234,12 +234,16 @@ static int block_child_sig(struct block *block) { sigset_t set; int err; + unsigned int i; /* It'd be safe to assume that all signals are unblocked by default */ err = sys_sigfillset(&set); if (err) return err; + for (i = 0; i <= SIGRTMAX - SIGRTMIN; i++) + sys_sigdelset(&set, SIGRTMIN + i); + return sys_sigunblock(&set); } diff --git a/sys.c b/sys.c index b7f770de..a07c9573 100644 --- a/sys.c +++ b/sys.c @@ -203,6 +203,20 @@ int sys_sigaddset(sigset_t *set, int sig) return 0; } +int sys_sigdelset(sigset_t *set, int sig) +{ + int rc; + + rc = sigdelset(set, sig); + if (rc == -1) { + sys_errno("sigdelset(%d (%s))", sig, strsignal(sig)); + rc = -errno; + return rc; + } + + return 0; +} + static int sys_sigprocmask(const sigset_t *set, int how) { int rc; diff --git a/sys.h b/sys.h index 98feaac8..f8b5517a 100644 --- a/sys.h +++ b/sys.h @@ -38,6 +38,7 @@ const char *sys_getenv(const char *name); int sys_sigemptyset(sigset_t *set); int sys_sigfillset(sigset_t *set); int sys_sigaddset(sigset_t *set, int sig); +int sys_sigdelset(sigset_t *set, int sig); int sys_sigunblock(const sigset_t *set); int sys_sigsetmask(const sigset_t *set); int sys_sigwaitinfo(sigset_t *set, int *sig, int *fd);