| 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
|
|
|
|
|