weak_alias(dummy_0, __synccall_unlock);
weak_alias(dummy_0, __pthread_tsd_run_dtors);
-#ifdef __pthread_unwind_next
-#undef __pthread_unwind_next
-#define __pthread_unwind_next __pthread_unwind_next_3
-#endif
-
-void __pthread_unwind_next(struct __ptcb *cb)
+void __pthread_do_unwind(struct __ptcb *cb)
{
pthread_t self = pthread_self();
int n;
__syscall(SYS_exit, 0);
}
-static int start(void *p)
+void __pthread_do_register(struct __ptcb *cb)
+{
+ struct pthread *self = pthread_self();
+ cb->__next = self->cancelbuf;
+ self->cancelbuf = cb;
+}
+
+void __pthread_do_unregister(struct __ptcb *cb)
+{
+ struct pthread *self = __pthread_self();
+ self->cancelbuf = self->cancelbuf->__next;
+}
+
+static void start(pthread_t self)
{
- struct pthread *self = p;
if (self->unblock_cancel)
__syscall(SYS_rt_sigprocmask, SIG_UNBLOCK, SIGPT_SET, 0, 8);
pthread_exit(self->start(self->start_arg));
- return 0;
}
-int __uniclone(void *, int (*)(), void *);
-
#define ROUND(x) (((x)+PAGE_SIZE-1)&-PAGE_SIZE)
/* pthread_key_create.c overrides this */
struct pthread *self = pthread_self();
struct __ptcb cb = { .__next = self->cancelbuf };
self->result = result;
- __pthread_unwind_next(&cb);
+ __pthread_do_unwind(&cb);
}