From: Ulrich Drepper Date: Thu, 20 Mar 2003 19:42:54 +0000 (+0000) Subject: (atomic_decrement_if_positive): Adjust for the correct atomic_compare_and_exchange_ac... X-Git-Tag: cvs/glibc-2_3_3~1132 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=972209dd7a4df65e335ca1f9200929e412c0871c;p=glibc.git (atomic_decrement_if_positive): Adjust for the correct atomic_compare_and_exchange_acq semantics. --- diff --git a/include/atomic.h b/include/atomic.h index 87b2df8d21..f0cc8cb643 100644 --- a/include/atomic.h +++ b/include/atomic.h @@ -113,22 +113,21 @@ /* Decrement *MEM if it is > 0, and return the old value. */ #ifndef atomic_decrement_if_positive -# define atomic_decrement_if_positive(mem) \ - ({ __typeof (*mem) __val; \ - __typeof (*mem) __oldval; \ +# define atomic_decrement_if_positive(mem) \ + ({ __typeof (*mem) __oldval; \ __typeof (mem) __memp; \ - \ + \ __val = *__memp; \ do \ { \ - if (__builtin_expect (__val <= 0, 0)) \ + __oldval = *__memp; \ + if (__builtin_expect (__oldval <= 0, 0)) \ break; \ - __oldval = __val; \ - __val = atomic_compare_and_exchange_acq (__memp, __oldval - 1, \ - __oldval); \ } \ - while (__builtin_expect (__val != __oldval, 0)); \ - __val; }) + while (__builtin_expect (atomic_compare_and_exchange_acq (__memp, \ + __oldval - 1, \ + __oldval), 0));\ + __oldval; }) #endif