summaryrefslogtreecommitdiff
path: root/src/thread/pthread_create.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/pthread_create.c')
-rw-r--r--src/thread/pthread_create.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
index 6e49acdc..6c841be7 100644
--- a/src/thread/pthread_create.c
+++ b/src/thread/pthread_create.c
@@ -35,7 +35,7 @@ _Noreturn void pthread_exit(void *result)
* This is important to ensure that dynamically allocated TLS
* is not under-allocated/over-committed, and possibly for other
* reasons as well. */
- __syscall(SYS_rt_sigprocmask, SIG_BLOCK, SIGALL_SET, &set, _NSIG/8);
+ __block_all_sigs(&set);
/* Wait to unlock the kill lock, which governs functions like
* pthread_kill which target a thread id, until signals have
@@ -51,7 +51,7 @@ _Noreturn void pthread_exit(void *result)
* stdio cleanup code a consistent state. */
if (a_fetch_add(&libc.threads_minus_1, -1)==0) {
libc.threads_minus_1 = 0;
- __syscall(SYS_rt_sigprocmask, SIG_SETMASK, &set, 0, _NSIG/8);
+ __restore_sigs(&set);
exit(0);
}
@@ -94,8 +94,7 @@ static int start(void *p)
self->detached = 2;
pthread_exit(0);
}
- __syscall(SYS_rt_sigprocmask, SIG_SETMASK,
- self->sigmask, 0, _NSIG/8);
+ __restore_sigs(self->sigmask);
}
if (self->unblock_cancel)
__syscall(SYS_rt_sigprocmask, SIG_UNBLOCK,
@@ -202,8 +201,7 @@ int pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp
}
if (attr._a_sched) {
do_sched = new->startlock[0] = 1;
- __syscall(SYS_rt_sigprocmask, SIG_BLOCK,
- SIGALL_SET, new->sigmask, _NSIG/8);
+ __block_app_sigs(new->sigmask);
}
new->unblock_cancel = self->cancel;
new->canary = self->canary;
@@ -214,8 +212,7 @@ int pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp
__release_ptc();
if (do_sched) {
- __syscall(SYS_rt_sigprocmask, SIG_SETMASK,
- new->sigmask, 0, _NSIG/8);
+ __restore_sigs(new->sigmask);
}
if (ret < 0) {