/ test / tsan / thread_name2.cc
thread_name2.cc
 1  // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
 2  #include "test.h"
 3  
 4  #if defined(__FreeBSD__)
 5  #include <pthread_np.h>
 6  #define pthread_setname_np pthread_set_name_np
 7  #endif
 8  
 9  int Global;
10  
11  void *Thread1(void *x) {
12    barrier_wait(&barrier);
13    Global++;
14    return 0;
15  }
16  
17  void *Thread2(void *x) {
18    pthread_setname_np(pthread_self(), "foobar2");
19    Global--;
20    barrier_wait(&barrier);
21    return 0;
22  }
23  
24  int main() {
25    barrier_init(&barrier, 3);
26    pthread_t t[2];
27    pthread_create(&t[0], 0, Thread1, 0);
28    pthread_create(&t[1], 0, Thread2, 0);
29    pthread_setname_np(t[0], "foobar1");
30    barrier_wait(&barrier);
31    pthread_join(t[0], NULL);
32    pthread_join(t[1], NULL);
33  }
34  
35  // CHECK: WARNING: ThreadSanitizer: data race
36  // CHECK:   Thread T1 'foobar1'
37  // CHECK:   Thread T2 'foobar2'