}
weak_alias(dummy_0, __rsyscall_lock);
weak_alias(dummy_0, __rsyscall_unlock);
-
-static void dummy_1(pthread_t self)
-{
-}
-weak_alias(dummy_1, __pthread_tsd_run_dtors);
+weak_alias(dummy_0, __pthread_tsd_run_dtors);
#ifdef __pthread_unwind_next
#undef __pthread_unwind_next
void __pthread_unwind_next(struct __ptcb *cb)
{
- pthread_t self;
+ pthread_t self = pthread_self();
int n;
- if (cb->__next) longjmp((void *)cb->__next->__jb, 1);
-
- self = pthread_self();
+ if (cb->__next) {
+ self->cancelbuf = cb->__next->__next;
+ longjmp((void *)cb->__next->__jb, 1);
+ }
LOCK(&self->exitlock);
- __pthread_tsd_run_dtors(self);
+ __pthread_tsd_run_dtors();
/* Mark this thread dead before decrementing count */
self->dead = 1;
new->detached = attr->_a_detach;
new->attr = *attr;
new->unblock_cancel = self->cancel;
- new->result = PTHREAD_CANCELED;
memcpy(new->tlsdesc, self->tlsdesc, sizeof new->tlsdesc);
new->tlsdesc[1] = (uintptr_t)new;
stack = (void *)((uintptr_t)new-1 & ~(uintptr_t)15);
struct pthread *self = pthread_self();
struct __ptcb cb = { .__next = self->cancelbuf };
self->result = result;
- self->canceldisable = 1;
- self->cancelasync = 0;
__pthread_unwind_next(&cb);
}