/* Add one to *once_control. */
- __lll_add (once_control, 1);
+ atomic_exchange_and_add (once_control, 1);
/* Wake up all other threads. */
lll_futex_wake (once_control, INT_MAX);
int *futex = (int *) sem;
int err, nr;
- nr = __lll_add (futex, 1);
+ nr = atomic_exchange_and_add (futex, 1);
err = lll_futex_wake (futex, nr + 1);
if (__builtin_expect (err, 0) < 0)
{
/* Add one to *once_control to take the bottom 2 bits from 01 to 10. */
- __lll_add (once_control, 1);
+ atomic_exchange_and_add (once_control, 1);
/* Wake up all other threads. */
lll_futex_wake (once_control, INT_MAX);
int err, nr;
__asm __volatile (__lll_rel_instr ::: "memory");
- nr = __lll_add (futex, 1);
+ nr = atomic_exchange_and_add (futex, 1);
err = lll_futex_wake (futex, nr);
if (err == 0)
return 0;
if (*futex > 0)
{
- val = __lll_dec_if_positive (futex);
+ val = atomic_decrement_if_positive (futex);
if (val > 0)
return 0;
}
if (err != 0 && err != -EWOULDBLOCK)
goto error_return;
- val = __lll_dec_if_positive (futex);
+ val = atomic_decrement_if_positive (futex);
}
while (val <= 0);
if (*futex > 0)
{
- val = __lll_dec_if_positive (futex);
+ val = atomic_decrement_if_positive (futex);
if (val > 0)
return 0;
}
{
if (*futex > 0)
{
- val = __lll_dec_if_positive (futex);
+ val = atomic_decrement_if_positive (futex);
if (val > 0)
return 0;
}