|
|
|
@ -30,12 +30,8 @@ int pthread_cond_broadcast(pthread_cond_t *c) |
|
|
|
} |
|
|
|
|
|
|
|
/* Move waiter count to the mutex */ |
|
|
|
for (;;) { |
|
|
|
w = c->_c_waiters; |
|
|
|
a_fetch_add(&m->_m_waiters, w); |
|
|
|
if (a_cas(&c->_c_waiters, w, 0) == w) break; |
|
|
|
a_fetch_add(&m->_m_waiters, -w); |
|
|
|
} |
|
|
|
w = a_swap(&c->_c_waiters, 0); |
|
|
|
a_fetch_add(&m->_m_waiters, w); |
|
|
|
|
|
|
|
/* Perform the futex requeue, waking one waiter unless we know
|
|
|
|
* that the calling thread holds the mutex. */ |
|
|
|
|