]>
git.proxmox.com Git - rustc.git/blob - src/compiler-rt/test/tsan/thread_name.cc
1 // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
5 #define USE_PTHREAD_SETNAME_NP __GLIBC_PREREQ(2, 12)
6 #elif defined(__FreeBSD__)
7 #include <pthread_np.h>
8 #define USE_PTHREAD_SETNAME_NP 1
9 #define pthread_setname_np pthread_set_name_np
11 #define USE_PTHREAD_SETNAME_NP 0
14 extern "C" void AnnotateThreadName(const char *f
, int l
, const char *name
);
18 void *Thread1(void *x
) {
19 barrier_wait(&barrier
);
20 AnnotateThreadName(__FILE__
, __LINE__
, "Thread1");
25 void *Thread2(void *x
) {
26 #if USE_PTHREAD_SETNAME_NP
27 pthread_setname_np(pthread_self(), "Thread2");
29 AnnotateThreadName(__FILE__
, __LINE__
, "Thread2");
32 barrier_wait(&barrier
);
37 barrier_init(&barrier
, 2);
39 pthread_create(&t
[0], NULL
, Thread1
, NULL
);
40 pthread_create(&t
[1], NULL
, Thread2
, NULL
);
41 pthread_join(t
[0], NULL
);
42 pthread_join(t
[1], NULL
);
45 // CHECK: WARNING: ThreadSanitizer: data race
46 // CHECK: Thread T1 'Thread1'
47 // CHECK: Thread T2 'Thread2'