X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2Fpthread_cond_timedwait.c;h=6b761455c47f0f8c8afde4e2d57768208efc06ba;hb=159d1f6c02569091c7a48bdb2e2e824b844a1902;hp=f5f37af1606c3d811af2c627e315a20f747b73f0;hpb=2d0bbe6c788938d1332609c014eeebc1dff966ac;p=musl diff --git a/src/thread/pthread_cond_timedwait.c b/src/thread/pthread_cond_timedwait.c index f5f37af1..6b761455 100644 --- a/src/thread/pthread_cond_timedwait.c +++ b/src/thread/pthread_cond_timedwait.c @@ -146,12 +146,17 @@ relock: if (oldstate == WAITING) goto done; + if (!node.next && !(m->_m_type & 8)) + a_inc(&m->_m_waiters); + /* Unlock the barrier that's holding back the next waiter, and * either wake it or requeue it to the mutex. */ if (node.prev) { int val = m->_m_lock; if (val>0) a_cas(&m->_m_lock, val, val|0x80000000); unlock_requeue(&node.prev->barrier, &m->_m_lock, m->_m_type & (8|128)); + } else if (!(m->_m_type & 8)) { + a_dec(&m->_m_waiters); } /* Since a signal was consumed, cancellation is not permitted. */