Fix atomicops internal implementation using GCC intrinsics.
BUG=116317
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10879019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152833 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/base/atomicops_internals_gcc.h b/base/atomicops_internals_gcc.h
index fe7a862..ed1b2d7 100644
--- a/base/atomicops_internals_gcc.h
+++ b/base/atomicops_internals_gcc.h
@@ -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,