From e6ec16356ec677e582230002bd3ffab46fd14a49 Mon Sep 17 00:00:00 2001 From: mtklein Date: Tue, 30 Aug 2016 10:45:17 -0700 Subject: [PATCH] Detect TSAN instead of relying on #ifdef THREAD_SANITIZER. And reindent. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2293063002 CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-TSAN-Trybot Review-Url: https://codereview.chromium.org/2293063002 --- gyp/common_conditions.gypi | 3 -- src/core/SkSharedMutex.cpp | 98 ++++++++++++++++++++------------------ 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/gyp/common_conditions.gypi b/gyp/common_conditions.gypi index df766b31bd..e1e657a981 100644 --- a/gyp/common_conditions.gypi +++ b/gyp/common_conditions.gypi @@ -464,9 +464,6 @@ ], 'ldflags': [ '-fsanitize=<(skia_sanitizer)' ], 'conditions' : [ - [ 'skia_sanitizer == "thread"', { - 'defines': [ 'THREAD_SANITIZER' ], - }], [ 'skia_sanitizer == "memory"', { 'cflags': [ '-O1', diff --git a/src/core/SkSharedMutex.cpp b/src/core/SkSharedMutex.cpp index aeaf5776bf..17714a7185 100644 --- a/src/core/SkSharedMutex.cpp +++ b/src/core/SkSharedMutex.cpp @@ -11,58 +11,62 @@ #include "SkTypes.h" #include "SkSemaphore.h" -#if defined(THREAD_SANITIZER) - -/* Report that a lock has been created at address "lock". */ -#define ANNOTATE_RWLOCK_CREATE(lock) \ - AnnotateRWLockCreate(__FILE__, __LINE__, lock) - -/* Report that the lock at address "lock" is about to be destroyed. */ -#define ANNOTATE_RWLOCK_DESTROY(lock) \ - AnnotateRWLockDestroy(__FILE__, __LINE__, lock) - -/* Report that the lock at address "lock" has been acquired. - is_w=1 for writer lock, is_w=0 for reader lock. */ -#define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ - AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w) - -/* Report that the lock at address "lock" is about to be released. */ -#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ - AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w) - -#ifdef DYNAMIC_ANNOTATIONS_WANT_ATTRIBUTE_WEAK -# ifdef __GNUC__ -# define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK __attribute__((weak)) -# else -/* TODO(glider): for Windows support we may want to change this macro in order - to prepend __declspec(selectany) to the annotations' declarations. */ -# error weak annotations are not supported for your compiler -# endif -#else -# define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK +#if !defined(__has_feature) + #define __has_feature(x) 0 #endif -extern "C" { -void AnnotateRWLockCreate( - const char *file, int line, - const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; -void AnnotateRWLockDestroy( - const char *file, int line, - const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; -void AnnotateRWLockAcquired( - const char *file, int line, - const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; -void AnnotateRWLockReleased( - const char *file, int line, - const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; -} +#if __has_feature(thread_sanitizer) + + /* Report that a lock has been created at address "lock". */ + #define ANNOTATE_RWLOCK_CREATE(lock) \ + AnnotateRWLockCreate(__FILE__, __LINE__, lock) + + /* Report that the lock at address "lock" is about to be destroyed. */ + #define ANNOTATE_RWLOCK_DESTROY(lock) \ + AnnotateRWLockDestroy(__FILE__, __LINE__, lock) + + /* Report that the lock at address "lock" has been acquired. + is_w=1 for writer lock, is_w=0 for reader lock. */ + #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ + AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w) + + /* Report that the lock at address "lock" is about to be released. */ + #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ + AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w) + + #if defined(DYNAMIC_ANNOTATIONS_WANT_ATTRIBUTE_WEAK) + #if defined(__GNUC__) + #define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK __attribute__((weak)) + #else + /* TODO(glider): for Windows support we may want to change this macro in order + to prepend __declspec(selectany) to the annotations' declarations. */ + #error weak annotations are not supported for your compiler + #endif + #else + #define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK + #endif + + extern "C" { + void AnnotateRWLockCreate( + const char *file, int line, + const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; + void AnnotateRWLockDestroy( + const char *file, int line, + const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; + void AnnotateRWLockAcquired( + const char *file, int line, + const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; + void AnnotateRWLockReleased( + const char *file, int line, + const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; + } #else -#define ANNOTATE_RWLOCK_CREATE(lock) -#define ANNOTATE_RWLOCK_DESTROY(lock) -#define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) -#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) + #define ANNOTATE_RWLOCK_CREATE(lock) + #define ANNOTATE_RWLOCK_DESTROY(lock) + #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) + #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) #endif