block.c 803 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "pthread_impl.h"
  2. #include "syscall.h"
  3. #include <signal.h>
  4. static const unsigned long all_mask[] = {
  5. #if ULONG_MAX == 0xffffffff && _NSIG == 129
  6. -1UL, -1UL, -1UL, -1UL
  7. #elif ULONG_MAX == 0xffffffff
  8. -1UL, -1UL
  9. #else
  10. -1UL
  11. #endif
  12. };
  13. static const unsigned long app_mask[] = {
  14. #if ULONG_MAX == 0xffffffff
  15. #if _NSIG == 65
  16. 0x7fffffff, 0xfffffffc
  17. #else
  18. 0x7fffffff, 0xfffffffc, -1UL, -1UL
  19. #endif
  20. #else
  21. #if _NSIG == 65
  22. 0xfffffffc7fffffff
  23. #else
  24. 0xfffffffc7fffffff, -1UL
  25. #endif
  26. #endif
  27. };
  28. void __block_all_sigs(void *set)
  29. {
  30. __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &all_mask, set, _NSIG/8);
  31. }
  32. void __block_app_sigs(void *set)
  33. {
  34. __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &app_mask, set, _NSIG/8);
  35. }
  36. void __restore_sigs(void *set)
  37. {
  38. __syscall(SYS_rt_sigprocmask, SIG_SETMASK, set, 0, _NSIG/8);
  39. }