From d5ac45b6513e006b5da362b5dfa32d2608cf166d Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Wed, 14 Jun 2017 15:11:16 +0300 Subject: [PATCH] machinarium: block signals from worker threads --- src/mm_signal_mgr.c | 6 +++--- src/mm_task_mgr.c | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mm_signal_mgr.c b/src/mm_signal_mgr.c index eed3bf5d..19161bcd 100644 --- a/src/mm_signal_mgr.c +++ b/src/mm_signal_mgr.c @@ -43,9 +43,6 @@ int mm_signalmgr_init(mm_signalmgr_t *mgr, mm_loop_t *loop) sigset_t mask; sigemptyset(&mask); int rc; - rc = sigprocmask(SIG_BLOCK, &mask, NULL); - if (rc == -1) - return -1; rc = signalfd(-1, &mask, SFD_NONBLOCK); if (rc == -1) return -1; @@ -83,6 +80,9 @@ int mm_signalmgr_set(mm_signalmgr_t *mgr, sigset_t *set) if (rc == -1) return -1; assert(rc == mgr->fd.fd); + rc = pthread_sigmask(SIG_BLOCK, set, NULL); + if (rc != 0) + return -1; return 0; } diff --git a/src/mm_task_mgr.c b/src/mm_task_mgr.c index 91315b8b..90b5a3cd 100644 --- a/src/mm_task_mgr.c +++ b/src/mm_task_mgr.c @@ -16,6 +16,10 @@ enum { static void mm_taskmgr_main(void *arg) { + sigset_t mask; + sigfillset(&mask); + pthread_sigmask(SIG_BLOCK, &mask, NULL); + (void)arg; for (;;) {