/* See LICENSE file for copyright and license details. */ #include "common.h" static void sighandler(int signo) { (void) signo; exiting = 1; } void setup_sighandler(void) { struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = &sighandler; sigemptyset(&sa.sa_mask); if (sigaction(SIGTERM, &sa, NULL)) eprintf("sigaction SIGTERM {.sa_handler=, .sa_mask={}, .sa_flags=0} NULL:"); if (sigaction(SIGINT, &sa, NULL)) eprintf("sigaction SIGINT {.sa_handler=, .sa_mask={}, .sa_flags=0} NULL:"); } void block_sigs(void) { sigset_t sigset; sigemptyset(&sigset); sigaddset(&sigset, SIGTERM); sigaddset(&sigset, SIGINT); errno = pthread_sigmask(SIG_BLOCK, &sigset, NULL); if (errno) eprintf("pthread_sigmask SIG_BLOCK {SIGTERM, SIGINT} NULL:"); } void unblock_sigs(void) { sigset_t sigset; sigemptyset(&sigset); sigaddset(&sigset, SIGTERM); sigaddset(&sigset, SIGINT); errno = pthread_sigmask(SIG_UNBLOCK, &sigset, NULL); if (errno) eprintf("pthread_sigmask SIG_UNBLOCK {SIGTERM, SIGINT} NULL:"); }