diff options
Diffstat (limited to 'test/tsan/write_in_reader_lock.cc')
| -rw-r--r-- | test/tsan/write_in_reader_lock.cc | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/test/tsan/write_in_reader_lock.cc b/test/tsan/write_in_reader_lock.cc index 55882139b153..3f7cb3579f77 100644 --- a/test/tsan/write_in_reader_lock.cc +++ b/test/tsan/write_in_reader_lock.cc @@ -1,6 +1,5 @@ // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s -#include <pthread.h> -#include <unistd.h> +#include "test.h" pthread_rwlock_t rwlock; int GLOB; @@ -8,14 +7,15 @@ int GLOB; void *Thread1(void *p) { (void)p; pthread_rwlock_rdlock(&rwlock); + barrier_wait(&barrier); // Write under reader lock. - sleep(1); GLOB++; pthread_rwlock_unlock(&rwlock); return 0; } int main(int argc, char *argv[]) { + barrier_init(&barrier, 2); pthread_rwlock_init(&rwlock, NULL); pthread_rwlock_rdlock(&rwlock); pthread_t t; @@ -23,6 +23,7 @@ int main(int argc, char *argv[]) { volatile int x = GLOB; (void)x; pthread_rwlock_unlock(&rwlock); + barrier_wait(&barrier); pthread_join(t, 0); pthread_rwlock_destroy(&rwlock); return 0; @@ -30,6 +31,6 @@ int main(int argc, char *argv[]) { // CHECK: WARNING: ThreadSanitizer: data race // CHECK: Write of size 4 at {{.*}} by thread T1{{.*}}: -// CHECK: #0 Thread1(void*) {{.*}}write_in_reader_lock.cc:13 +// CHECK: #0 Thread1(void*) {{.*}}write_in_reader_lock.cc:12 // CHECK: Previous read of size 4 at {{.*}} by main thread{{.*}}: // CHECK: #0 main {{.*}}write_in_reader_lock.cc:23 |
