1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include "pthread_impl.h"
#include "syscall.h"
#include <signal.h>
static const unsigned long all_mask[] = {
#if ULONG_MAX == 0xffffffff && _NSIG > 65
-1UL, -1UL, -1UL, -1UL
#elif ULONG_MAX == 0xffffffff || _NSIG > 65
-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);
}
|