[llvm-commits] [compiler-rt] r169379 - /compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc
Dmitry Vyukov
dvyukov at google.com
Wed Dec 5 05:14:55 PST 2012
Author: dvyukov
Date: Wed Dec 5 07:14:55 2012
New Revision: 169379
URL: http://llvm.org/viewvc/llvm-project?rev=169379&view=rev
Log:
tsan: fix memory barriers in atomics
Modified:
compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc?rev=169379&r1=169378&r2=169379&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc Wed Dec 5 07:14:55 2012
@@ -115,7 +115,10 @@
}
template<typename T> T func_xchg(volatile T *v, T op) {
- return __sync_lock_test_and_set(v, op);
+ T res = __sync_lock_test_and_set(v, op);
+ // __sync_lock_test_and_set does not contain full barrier.
+ __sync_synchronize();
+ return res;
}
template<typename T> T func_add(volatile T *v, T op) {
@@ -255,6 +258,9 @@
thr->clock.ReleaseStore(&s->clock);
*a = v;
s->mtx.Unlock();
+ // Trainling memory barrier to provide sequential consistency
+ // for Dekker-like store-load synchronization.
+ __sync_synchronize();
}
template<typename T, T (*F)(volatile T *v, T op)>
More information about the llvm-commits
mailing list