45 lines
803 B
C
45 lines
803 B
C
|
#include "pthread_impl.h"
|
||
|
#include "syscall.h"
|
||
|
#include <signal.h>
|
||
|
|
||
|
static const unsigned long all_mask[] = {
|
||
|
#if ULONG_MAX == 0xffffffff && _NSIG == 129
|
||
|
-1UL, -1UL, -1UL, -1UL
|
||
|
#elif ULONG_MAX == 0xffffffff
|
||
|
-1UL, -1UL
|
||
|
#else
|
||
|
-1UL
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
static const unsigned long app_mask[] = {
|
||
|
#if ULONG_MAX == 0xffffffff
|
||
|
#if _NSIG == 65
|
||
|
0x7fffffff, 0xfffffffc
|
||
|
#else
|
||
|
0x7fffffff, 0xfffffffc, -1UL, -1UL
|
||
|
#endif
|
||
|
#else
|
||
|
#if _NSIG == 65
|
||
|
0xfffffffc7fffffff
|
||
|
#else
|
||
|
0xfffffffc7fffffff, -1UL
|
||
|
#endif
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
void __block_all_sigs(void *set)
|
||
|
{
|
||
|
__syscall(SYS_rt_sigprocmask, SIG_BLOCK, &all_mask, set, _NSIG/8);
|
||
|
}
|
||
|
|
||
|
void __block_app_sigs(void *set)
|
||
|
{
|
||
|
__syscall(SYS_rt_sigprocmask, SIG_BLOCK, &app_mask, set, _NSIG/8);
|
||
|
}
|
||
|
|
||
|
void __restore_sigs(void *set)
|
||
|
{
|
||
|
__syscall(SYS_rt_sigprocmask, SIG_SETMASK, set, 0, _NSIG/8);
|
||
|
}
|