1 #include "atomic.h"
2 #include "futex_impl.h"
3 
__wait(atomic_int * futex,atomic_int * waiters,int current_value)4 void __wait(atomic_int* futex, atomic_int* waiters, int current_value) {
5     int spins = 100;
6     while (spins-- && (!waiters || !atomic_load(waiters))) {
7         if (atomic_load(futex) == current_value)
8             a_spin();
9         else
10             return;
11     }
12     if (waiters)
13         atomic_fetch_add(waiters, 1);
14     while (atomic_load(futex) == current_value) {
15         _zx_futex_wait(futex, current_value, ZX_HANDLE_INVALID, ZX_TIME_INFINITE);
16     }
17     if (waiters)
18         atomic_fetch_sub(waiters, 1);
19 }
20