X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Fthread%2Fpthread_mutex_timedlock.c;h=f1c3eed74f0868561a5c3bc288ce798922b18700;hp=20ce01283816fcd108662c424ae3f88d91ea3e53;hb=047e434ef5fd5437a74f98f63c40a77a683f7f3f;hpb=18c7ea8055cf733f168d2c74d7cc8523a360f5f1 diff --git a/src/thread/pthread_mutex_timedlock.c b/src/thread/pthread_mutex_timedlock.c index 20ce0128..f1c3eed7 100644 --- a/src/thread/pthread_mutex_timedlock.c +++ b/src/thread/pthread_mutex_timedlock.c @@ -4,8 +4,9 @@ int pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec *at) { int r, w=0; while ((r=pthread_mutex_trylock(m)) == EBUSY) { + if (!(r=m->_m_lock) || (r&0x40000000)) continue; if (!w) a_inc(&m->_m_waiters), w++; - if (__timedwait(&m->_m_lock, 1, CLOCK_REALTIME, at, 0) == ETIMEDOUT) { + if (__timedwait(&m->_m_lock, r, CLOCK_REALTIME, at, 0) == ETIMEDOUT) { if (w) a_dec(&m->_m_waiters); return ETIMEDOUT; }