it was assuming the result of the condition it was supposed to be checking for, i.e. that the thread ptr had already been initialized by pthread_mutex_lock. use the slower call to be safe.
@@ -37,7 +37,7 @@ int pthread_cond_timedwait(pthread_cond_t *c, pthread_mutex_t *m, const struct t
struct cm cm = { .c=c, .m=m };
int r, e=0, seq;
- if (m->_m_type && (m->_m_lock&INT_MAX) != __pthread_self()->tid)
+ if (m->_m_type && (m->_m_lock&INT_MAX) != pthread_self()->tid)
return EPERM;
if (ts && ts->tv_nsec >= 1000000000UL)