From b4b9743c0003b9538cbc90c602f55c0ed3f16d17 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 2 Sep 2013 15:19:37 -0400 Subject: [PATCH] fix mips-specific bug in synccall (too little space for signal mask) switch to the new __block_all_sigs/__restore_sigs internal API to clean up the code too. --- src/thread/synccall.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/thread/synccall.c b/src/thread/synccall.c index 90ad1e25..4127a413 100644 --- a/src/thread/synccall.c +++ b/src/thread/synccall.c @@ -43,7 +43,7 @@ void __synccall(void (*func)(void *), void *ctx) pthread_t self; struct sigaction sa; struct chain *next; - uint64_t oldmask; + sigset_t oldmask; if (!libc.threads_minus_1) { func(ctx); @@ -52,8 +52,7 @@ void __synccall(void (*func)(void *), void *ctx) __inhibit_ptc(); - __syscall(SYS_rt_sigprocmask, SIG_BLOCK, SIGALL_SET, - &oldmask, _NSIG/8); + __block_all_sigs(&oldmask); sem_init(&chaindone, 0, 0); sem_init(&chainlock, 0, 1); @@ -86,8 +85,7 @@ void __synccall(void (*func)(void *), void *ctx) sem_post(&cur->sem); } - __syscall(SYS_rt_sigprocmask, SIG_SETMASK, - &oldmask, 0, _NSIG/8); + __restore_sigs(&oldmask); __release_ptc(); } -- 2.25.1