projects
/
oweals
/
musl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
7c6c290
)
have new timer threads unblock their own SIGTIMER
author
Rich Felker
<dalias@aerifal.cx>
Sat, 3 Aug 2013 21:10:42 +0000
(17:10 -0400)
committer
Rich Felker
<dalias@aerifal.cx>
Sat, 3 Aug 2013 21:10:42 +0000
(17:10 -0400)
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.
src/time/timer_create.c
patch
|
blob
|
history
diff --git
a/src/time/timer_create.c
b/src/time/timer_create.c
index ee6a9c9d15f057d12ef510201fe01f887fa4468d..b54a524ce85bb2e3ec97987bb3b017dc958d96f7 100644
(file)
--- 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);
}