+ int tmp, cs, r = 0;
+ __pthread_testcancel();
+ __pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
+ if (cs == PTHREAD_CANCEL_ENABLE) __pthread_setcancelstate(cs, 0);
+ if (t->detached) a_crash();
+ while ((tmp = t->tid) && r != ETIMEDOUT && r != EINVAL)
+ r = __timedwait_cp(&t->tid, tmp, CLOCK_REALTIME, at, 0);
+ __pthread_setcancelstate(cs, 0);
+ if (r == ETIMEDOUT || r == EINVAL) return r;
+ a_barrier();
+ if (res) *res = t->result;
+ if (t->map_base) __munmap(t->map_base, t->map_size);
+ return 0;