prevent sigprocmask/pthread_sigmask from blocking implementation signals
[musl] / src / signal / sigprocmask.c
1 #include <signal.h>
2 #include "syscall.h"
3 #include "libc.h"
4 #include "pthread_impl.h"
5
6 int __libc_sigprocmask(int how, const sigset_t *set, sigset_t *old)
7 {
8         return syscall4(__NR_rt_sigprocmask, how, (long)set, (long)old, 8);
9 }
10
11 int __sigprocmask(int how, const sigset_t *set, sigset_t *old)
12 {
13         sigset_t tmp;
14         /* Disallow blocking thread control signals */
15         if (how != SIG_UNBLOCK) {
16                 tmp = *set;
17                 set = &tmp;
18                 sigdelset(&tmp, SIGCANCEL);
19                 sigdelset(&tmp, SIGSYSCALL);
20         }
21         return __libc_sigprocmask(how, set, old);
22 }
23
24 weak_alias(__sigprocmask, sigprocmask);
25 weak_alias(__sigprocmask, pthread_sigmask);