mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
SIGEV_THREAD timers: re-block signals when reusing kernel thread
previously, we left any changes made by the application to the timer thread's signal mask active when resetting the thread state for reuse. not only did this violate the intended invariant that timer threads start with all signals blocked; it also allowed application code to execute in a thread that, formally, did not exist. and further, if the internal SIGTIMER signal became unblocked, it could also lead to missed timer expiration events.
This commit is contained in:
parent
47fa6e4fcc
commit
561cd07dff
1 changed files with 2 additions and 0 deletions
|
@ -30,6 +30,8 @@ static void cleanup_fromsig(void *p)
|
|||
{
|
||||
pthread_t self = __pthread_self();
|
||||
__pthread_tsd_run_dtors();
|
||||
__block_app_sigs(0);
|
||||
__syscall(SYS_rt_sigprocmask, SIG_BLOCK, SIGTIMER_SET, 0, _NSIG/8);
|
||||
self->cancel = 0;
|
||||
self->cancelbuf = 0;
|
||||
self->canceldisable = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue