Index: src/core/SkSharedMutex.cpp |
diff --git a/src/core/SkSharedMutex.cpp b/src/core/SkSharedMutex.cpp |
index aeaf5776bf4e04cb162d31283b37323212892c94..17714a7185625434171c915f84875ec9e93e5027 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 |