X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=signal.c;h=aa63c8b5461a9627c021a514b83b7c8ee1067067;hb=8aa0f575bcca12ab63ab53141c2144448c457478;hp=2d5549d59817b151ae6780fa43e083f881c81ea9;hpb=3d875f51dcbb6b07c4698d0696b8b946997e6373;p=paraslash.git diff --git a/signal.c b/signal.c index 2d5549d5..aa63c8b5 100644 --- a/signal.c +++ b/signal.c @@ -147,6 +147,46 @@ void para_install_sighandler(int sig) para_sigaction(sig, &generic_signal_handler); } +/** + * Block a signal for the caller. + * + * \param sig The signal to block. + * + * This sets the given signal in the current signal mask of the calling process + * to prevent this signal from delivery. + * + * \sa \ref para_unblock_signal(), sigprocmask(2), sigaddset(3). + */ +void para_block_signal(int sig) +{ + sigset_t set; + + PARA_DEBUG_LOG("blocking signal %d\n", sig); + sigemptyset(&set); + sigaddset(&set, sig); + sigprocmask(SIG_BLOCK, &set, NULL); +} + +/** + * Unblock a signal. + * + * \param sig The signal to unblock. + * + * This function removes the given signal from the current set of blocked + * signals. + * + * \sa \ref para_block_signal(), sigprocmask(2), sigaddset(3). + */ +void para_unblock_signal(int sig) +{ + sigset_t set; + + PARA_DEBUG_LOG("unblocking signal %d\n", sig); + sigemptyset(&set); + sigaddset(&set, sig); + sigprocmask(SIG_UNBLOCK, &set, NULL); +} + /** * Return the number of the next pending signal. *