From: Rich Felker Date: Sat, 3 Aug 2013 21:10:42 +0000 (-0400) Subject: have new timer threads unblock their own SIGTIMER X-Git-Tag: v0.9.13~82 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a7f18a55298ffaa287336fd0c81dcd3fe45e16b6;p=oweals%2Fmusl.git have new timer threads unblock their own SIGTIMER unblocking it in the pthread_once init function is not sufficient, since multiple threads, some of them with the signal blocked, could already exist before this is called; timers started from such threads would be non-functional. --- diff --git a/src/time/timer_create.c b/src/time/timer_create.c index ee6a9c9d..b54a524c 100644 --- a/src/time/timer_create.c +++ b/src/time/timer_create.c @@ -55,8 +55,6 @@ static void install_handler() .sa_flags = SA_SIGINFO | SA_RESTART }; __libc_sigaction(SIGTIMER, &sa, 0); - __syscall(SYS_rt_sigprocmask, SIG_UNBLOCK, - SIGTIMER_SET, 0, _NSIG/8); } static void *start(void *arg) @@ -72,6 +70,8 @@ static void *start(void *arg) pthread_barrier_wait(&args->b); if ((id = self->timer_id) >= 0) { + __syscall(SYS_rt_sigprocmask, SIG_UNBLOCK, + SIGTIMER_SET, 0, _NSIG/8); __wait(&self->timer_id, 0, id, 1); __syscall(SYS_timer_delete, id); }