]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s |
2 | #include "java.h" | |
1a4d82fc JJ |
3 | |
4 | jptr varaddr; | |
5 | jptr lockaddr; | |
6 | ||
7 | void *Thread(void *p) { | |
92a42be0 | 8 | barrier_wait(&barrier); |
1a4d82fc JJ |
9 | __tsan_java_mutex_read_lock(lockaddr); |
10 | *(int*)varaddr = 42; | |
11 | __tsan_java_mutex_read_unlock(lockaddr); | |
12 | return 0; | |
13 | } | |
14 | ||
15 | int main() { | |
92a42be0 | 16 | barrier_init(&barrier, 2); |
1a4d82fc | 17 | int const kHeapSize = 1024 * 1024; |
92a42be0 SL |
18 | jptr jheap = (jptr)malloc(kHeapSize + 8) + 8; |
19 | __tsan_java_init(jheap, kHeapSize); | |
1a4d82fc | 20 | const int kBlockSize = 16; |
92a42be0 SL |
21 | __tsan_java_alloc(jheap, kBlockSize); |
22 | varaddr = jheap; | |
23 | lockaddr = jheap + 8; | |
1a4d82fc JJ |
24 | pthread_t th; |
25 | pthread_create(&th, 0, Thread, 0); | |
26 | __tsan_java_mutex_lock(lockaddr); | |
27 | *(int*)varaddr = 43; | |
28 | __tsan_java_mutex_unlock(lockaddr); | |
92a42be0 | 29 | barrier_wait(&barrier); |
1a4d82fc | 30 | pthread_join(th, 0); |
92a42be0 SL |
31 | __tsan_java_free(jheap, kBlockSize); |
32 | printf("DONE\n"); | |
1a4d82fc JJ |
33 | return __tsan_java_fini(); |
34 | } | |
35 | ||
36 | // CHECK-NOT: WARNING: ThreadSanitizer: data race | |
92a42be0 | 37 | // CHECK: DONE |