|
11 | 11 | #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) |
12 | 12 | #include <dispatch/dispatch.h> |
13 | 13 |
|
14 | | - // We've got to teach TSAN that there is a happens-before edge between |
15 | | - // dispatch_semaphore_signal() and dispatch_semaphore_wait(). |
16 | | - #if __has_feature(thread_sanitizer) |
17 | | - extern "C" void AnnotateHappensBefore(const char*, int, void*); |
18 | | - extern "C" void AnnotateHappensAfter (const char*, int, void*); |
19 | | - #else |
20 | | - static void AnnotateHappensBefore(const char*, int, void*) {} |
21 | | - static void AnnotateHappensAfter (const char*, int, void*) {} |
22 | | - #endif |
23 | | - |
24 | 14 | struct SkSemaphore::OSSemaphore { |
25 | 15 | dispatch_semaphore_t fSemaphore; |
26 | 16 |
|
27 | | - OSSemaphore() { |
28 | | - fSemaphore = dispatch_semaphore_create(0/*initial count*/); |
29 | | - } |
| 17 | + OSSemaphore() { fSemaphore = dispatch_semaphore_create(0/*initial count*/); } |
30 | 18 | ~OSSemaphore() { dispatch_release(fSemaphore); } |
31 | 19 |
|
32 | | - void signal(int n) { |
33 | | - while (n-- > 0) { |
34 | | - AnnotateHappensBefore(__FILE__, __LINE__, &fSemaphore); |
35 | | - dispatch_semaphore_signal(fSemaphore); |
36 | | - } |
37 | | - } |
38 | | - void wait() { |
39 | | - dispatch_semaphore_wait(fSemaphore, DISPATCH_TIME_FOREVER); |
40 | | - AnnotateHappensAfter(__FILE__, __LINE__, &fSemaphore); |
41 | | - } |
| 20 | + void signal(int n) { while (n --> 0) { dispatch_semaphore_signal(fSemaphore); } } |
| 21 | + void wait() { dispatch_semaphore_wait(fSemaphore, DISPATCH_TIME_FOREVER); } |
42 | 22 | }; |
43 | 23 | #elif defined(SK_BUILD_FOR_WIN) |
44 | 24 | struct SkSemaphore::OSSemaphore { |
|
0 commit comments