Index: base/atomicops_internals_gcc.h |
=================================================================== |
--- base/atomicops_internals_gcc.h (revision 152814) |
+++ base/atomicops_internals_gcc.h (working copy) |
@@ -17,9 +17,11 @@ |
Atomic32 new_value) { |
Atomic32 prev_value; |
do { |
- prev_value = __sync_val_compare_and_swap(ptr, old_value, new_value); |
- } while (prev_value != old_value); |
- return old_value; |
+ if (__sync_bool_compare_and_swap(ptr, old_value, new_value)) |
+ return old_value; |
+ prev_value = *ptr; |
+ } while (prev_value == old_value); |
+ return prev_value; |
} |
inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, |