From 972209dd7a4df65e335ca1f9200929e412c0871c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 20 Mar 2003 19:42:54 +0000 Subject: (atomic_decrement_if_positive): Adjust for the correct atomic_compare_and_exchange_acq semantics. --- include/atomic.h | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) 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 -- cgit 1.4.1