while (a_swap(&c->_c_lock, 1))
__wait(&c->_c_lock, &c->_c_lockwait, 1, 1);
- if (c->_c_waiters) c->_c_waiters--;
+ if (c->_c_waiters2) c->_c_waiters2--;
else a_dec(&m->_m_waiters);
a_store(&c->_c_lock, 0);
pthread_testcancel();
- if (c->_c_mutex == (void *)-1) {
- a_inc(&c->_c_waiters);
- } else {
+ a_inc(&c->_c_waiters);
+
+ if (c->_c_mutex != (void *)-1) {
c->_c_mutex = m;
while (a_swap(&c->_c_lock, 1))
__wait(&c->_c_lock, &c->_c_lockwait, 1, 1);
- c->_c_waiters++;
+ c->_c_waiters2++;
a_store(&c->_c_lock, 0);
if (c->_c_lockwait) __wake(&c->_c_lock, 1, 1);
}