diff options
Diffstat (limited to 'sig.c')
-rw-r--r-- | sig.c | 23 |
1 files changed, 12 insertions, 11 deletions
@@ -8,20 +8,23 @@ * we block signals in pool threads, only the main thread receives signals */ -void mog_intr_disable(void) +static sigset_t fullset; +sigset_t mog_emptyset; + +__attribute__((constructor)) void sig_init(void) { - sigset_t set; + CHECK(int, 0, sigfillset(&fullset)); + CHECK(int, 0, sigemptyset(&mog_emptyset)); +} - CHECK(int, 0, sigfillset(&set)); - CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &set, NULL)); +void mog_intr_disable(void) +{ + CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &fullset, NULL)); } void mog_intr_enable(void) { - sigset_t set; - - CHECK(int, 0, sigemptyset(&set)); - CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &set, NULL)); + CHECK(int, 0, pthread_sigmask(SIG_SETMASK, &mog_emptyset, NULL)); } /* @@ -47,7 +50,6 @@ static void sleeper(struct timespec *tsp, const sigset_t *sigmask) /* thread-safe, interruptible sleep, negative seconds -> sleep forever */ void mog_sleep(long seconds) { - sigset_t set; struct timespec ts; struct timespec *tsp; @@ -59,6 +61,5 @@ void mog_sleep(long seconds) tsp = &ts; } - CHECK(int, 0, sigemptyset(&set)); - sleeper(tsp, &set); + sleeper(tsp, &mog_emptyset); } |