diff --git a/linuxthreads/condvar.c b/linuxthreads/condvar.c index 1d6e930b35..6b4a12b0e4 100644 --- a/linuxthreads/condvar.c +++ b/linuxthreads/condvar.c @@ -143,6 +143,10 @@ pthread_cond_timedwait_relative_old(pthread_cond_t *cond, sigjmp_buf jmpbuf; pthread_extricate_if extr; + /* Check whether the mutex is locked and owned by this thread. */ + if (mutex->__m_owner != self) + return EINVAL; + /* Set up extrication interface */ extr.pu_object = cond; extr.pu_extricate_func = cond_extricate_func; @@ -270,6 +274,10 @@ pthread_cond_timedwait_relative_new(pthread_cond_t *cond, sigjmp_buf jmpbuf; pthread_extricate_if extr; + /* Check whether the mutex is locked and owned by this thread. */ + if (mutex->__m_owner != self) + return EINVAL; + /* Set up extrication interface */ extr.pu_object = cond; extr.pu_extricate_func = cond_extricate_func; @@ -381,10 +389,6 @@ pthread_cond_timedwait_relative_new(pthread_cond_t *cond, int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec * abstime) { - /* Check whether the mutex is locked and owned by this thread. */ - if (mutex->__m_owner != self) - return EINVAL; - /* Indirect call through pointer! */ return pthread_cond_tw_rel(cond, mutex, abstime); }