From 4abab5ad6c8465a7528ccdd5f49367da05f78bbd Mon Sep 17 00:00:00 2001 From: Vladimir Azarov Date: Tue, 1 Oct 2024 15:47:05 +0200 Subject: Initial version --- src/signal/block.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/signal/block.c (limited to 'src/signal/block.c') diff --git a/src/signal/block.c b/src/signal/block.c new file mode 100644 index 0000000..cc8698f --- /dev/null +++ b/src/signal/block.c @@ -0,0 +1,44 @@ +#include "pthread_impl.h" +#include "syscall.h" +#include + +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); +} -- cgit v1.2.3