From: mtklein Date: Fri, 6 Jun 2014 22:11:04 +0000 (-0700) Subject: use __atomics in SkBarriers_tsan.h X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~7310 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=19cae4fa2cf667acb05d2e5a1bf0a5dab606fe68;p=platform%2Fupstream%2FlibSkiaSharp.git use __atomics in SkBarriers_tsan.h I am having a hard time getting TSAN's own atomic hooks to work on our bots, but __atomic_foo work fine and are understood just fine by TSAN. BUG=skia: R=bungeman@google.com, mtklein@google.com Author: mtklein@chromium.org Review URL: https://codereview.chromium.org/320063003 --- diff --git a/src/ports/SkBarriers_tsan.h b/src/ports/SkBarriers_tsan.h index ae68b3d..6f27390 100644 --- a/src/ports/SkBarriers_tsan.h +++ b/src/ports/SkBarriers_tsan.h @@ -8,41 +8,18 @@ #ifndef SkBarriers_tsan_DEFINED #define SkBarriers_tsan_DEFINED -#include - static inline void sk_compiler_barrier() { asm volatile("" : : : "memory"); } -// We'd do this as separate functions, but you can't partially specialize functions... -template -struct SkBarriers { - static T AcquireLoad(T*); - static void ReleaseStore(T*, T); -}; - -#define SK_BARRIERS(BITS) \ - template \ - struct SkBarriers { \ - static T AcquireLoad(T* ptr) { \ - return (T)__tsan_atomic ## BITS ## _load((__tsan_atomic ## BITS*)ptr, \ - __tsan_memory_order_acquire); \ - } \ - static void ReleaseStore(T* ptr, T val) { \ - __tsan_atomic ## BITS ## _store((__tsan_atomic ## BITS*)ptr, \ - val, \ - __tsan_memory_order_release); \ - } \ - } -SK_BARRIERS(8); -SK_BARRIERS(16); -SK_BARRIERS(32); -SK_BARRIERS(64); -#undef SK_BARRIERS - template -T sk_acquire_load(T* ptr) { return SkBarriers::AcquireLoad(ptr); } +T sk_acquire_load(T* ptr) { + SkASSERT(__atomic_always_lock_free(sizeof(T), ptr)); + return __atomic_load_n(ptr, __ATOMIC_ACQUIRE); +} template -void sk_release_store(T* ptr, T val) { SkBarriers::ReleaseStore(ptr, val); } - +void sk_release_store(T* ptr, T val) { + SkASSERT(__atomic_always_lock_free(sizeof(T), ptr)); + return __atomic_store_n(ptr, val, __ATOMIC_RELEASE); +} #endif//SkBarriers_tsan_DEFINED