}
weak_alias(dummy_1, __pthread_tsd_run_dtors);
+void __reset_tls();
+
static void cleanup_fromsig(void *p)
{
pthread_t self = __pthread_self();
self->canceldisable = 0;
self->cancelasync = 0;
self->unblock_cancel = 0;
+ __reset_tls();
longjmp(p, 1);
}
.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)
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);
}