REFCNTF_WAITING
if ((n & ~REFCNTF_WAITING) == 0)
if (atomic_fcmpset_int(countp, &n, n | REFCNTF_WAITING))
if (n == (REFCNTF_WAITING | i)) {
atomic_clear_int(countp, REFCNTF_WAITING);
n &= ~REFCNTF_WAITING;
return ((atomic_fetchadd_int(countp, -1) & ~REFCNTF_WAITING) == 1);
return ((atomic_fetchadd_int(countp, -i) & ~REFCNTF_WAITING) == i);
if (n == (REFCNTF_WAITING | 1)) {
atomic_clear_int(countp, REFCNTF_WAITING);
n &= ~REFCNTF_WAITING;