Lines Matching refs:cond
39 pthread_cond_t *cond; member
47 __condvar_confirm_wakeup (pthread_cond_t *cond, int private) in __condvar_confirm_wakeup() argument
53 if ((atomic_fetch_add_release (&cond->__data.__wrefs, -8) >> 2) == 3) in __condvar_confirm_wakeup()
54 futex_wake (&cond->__data.__wrefs, INT_MAX, private); in __condvar_confirm_wakeup()
78 __condvar_cancel_waiting (pthread_cond_t *cond, uint64_t seq, unsigned int g, in __condvar_cancel_waiting() argument
85 __condvar_acquire_lock (cond, private); in __condvar_cancel_waiting()
87 uint64_t g1_start = __condvar_load_g1_start_relaxed (cond) >> 1; in __condvar_cancel_waiting()
96 if (g1_start + __condvar_get_orig_size (cond) <= seq) in __condvar_cancel_waiting()
101 if (cond->__data.__g_size[g] + __PTHREAD_COND_MAX_GROUP_SIZE > 0) in __condvar_cancel_waiting()
103 cond->__data.__g_size[g]--; in __condvar_cancel_waiting()
110 __condvar_release_lock (cond, private); in __condvar_cancel_waiting()
111 __pthread_cond_broadcast (cond); in __condvar_cancel_waiting()
119 if (cond->__data.__g_size[g] == 0) in __condvar_cancel_waiting()
129 cond->__data.__g_size[g]--; in __condvar_cancel_waiting()
134 __condvar_release_lock (cond, private); in __condvar_cancel_waiting()
142 __pthread_cond_signal (cond); in __condvar_cancel_waiting()
148 __condvar_dec_grefs (pthread_cond_t *cond, unsigned int g, int private) in __condvar_dec_grefs() argument
152 if (atomic_fetch_add_release (cond->__data.__g_refs + g, -2) == 3) in __condvar_dec_grefs()
158 atomic_fetch_and_relaxed (cond->__data.__g_refs + g, ~(unsigned int) 1); in __condvar_dec_grefs()
159 futex_wake (cond->__data.__g_refs + g, INT_MAX, private); in __condvar_dec_grefs()
171 pthread_cond_t *cond = cbuffer->cond; in __condvar_cleanup_waiting() local
174 __condvar_dec_grefs (cond, g, cbuffer->private); in __condvar_cleanup_waiting()
176 __condvar_cancel_waiting (cond, cbuffer->wseq >> 1, g, cbuffer->private); in __condvar_cleanup_waiting()
183 futex_wake (cond->__data.__g_signals + g, 1, cbuffer->private); in __condvar_cleanup_waiting()
185 __condvar_confirm_wakeup (cond, cbuffer->private); in __condvar_cleanup_waiting()
379 __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex, in __pthread_cond_wait_common() argument
386 LIBC_PROBE (cond_wait, 2, cond, mutex); in __pthread_cond_wait_common()
401 uint64_t wseq = __condvar_fetch_add_wseq_acquire (cond, 2); in __pthread_cond_wait_common()
409 unsigned int flags = atomic_fetch_add_relaxed (&cond->__data.__wrefs, 8); in __pthread_cond_wait_common()
422 __condvar_cancel_waiting (cond, seq, g, private); in __pthread_cond_wait_common()
423 __condvar_confirm_wakeup (cond, private); in __pthread_cond_wait_common()
432 unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g); in __pthread_cond_wait_common()
453 if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1)) in __pthread_cond_wait_common()
459 signals = atomic_load_acquire (cond->__data.__g_signals + g); in __pthread_cond_wait_common()
484 atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2); in __pthread_cond_wait_common()
485 if (((atomic_load_acquire (cond->__data.__g_signals + g) & 1) != 0) in __pthread_cond_wait_common()
486 || (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))) in __pthread_cond_wait_common()
490 __condvar_dec_grefs (cond, g, private); in __pthread_cond_wait_common()
498 cbuffer.cond = cond; in __pthread_cond_wait_common()
504 cond->__data.__g_signals + g, 0, clockid, abstime, private); in __pthread_cond_wait_common()
510 __condvar_dec_grefs (cond, g, private); in __pthread_cond_wait_common()
516 __condvar_cancel_waiting (cond, seq, g, private); in __pthread_cond_wait_common()
521 __condvar_dec_grefs (cond, g, private); in __pthread_cond_wait_common()
524 signals = atomic_load_acquire (cond->__data.__g_signals + g); in __pthread_cond_wait_common()
532 while (!atomic_compare_exchange_weak_acquire (cond->__data.__g_signals + g, in __pthread_cond_wait_common()
539 uint64_t g1_start = __condvar_load_g1_start_relaxed (cond); in __pthread_cond_wait_common()
571 unsigned int s = atomic_load_relaxed (cond->__data.__g_signals + g); in __pthread_cond_wait_common()
572 while (__condvar_load_g1_start_relaxed (cond) == g1_start) in __pthread_cond_wait_common()
580 (cond->__data.__g_signals + g, &s, s + 2)) in __pthread_cond_wait_common()
590 futex_wake (cond->__data.__g_signals + g, 1, private); in __pthread_cond_wait_common()
603 __condvar_confirm_wakeup (cond, private); in __pthread_cond_wait_common()
615 ___pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) in ___pthread_cond_wait() argument
618 return __pthread_cond_wait_common (cond, mutex, 0, NULL); in ___pthread_cond_wait()
630 ___pthread_cond_timedwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex, in libc_hidden_ver()
640 unsigned int flags = atomic_load_relaxed (&cond->__data.__wrefs); in libc_hidden_ver()
643 return __pthread_cond_wait_common (cond, mutex, clockid, abstime); in libc_hidden_ver()
653 ___pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
658 return __pthread_cond_timedwait64 (cond, mutex, &ts64);
670 ___pthread_cond_clockwait64 (pthread_cond_t *cond, pthread_mutex_t *mutex, in libc_hidden_ver()
682 return __pthread_cond_wait_common (cond, mutex, clockid, abstime); in libc_hidden_ver()
692 ___pthread_cond_clockwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
698 return __pthread_cond_clockwait64 (cond, mutex, clockid, &ts64);