1 // RUN: %clang_tsan -O1 %s -lpthread -o %t && %deflake %run %t | FileCheck %s 2 // Regression test for 3 // https://github.com/google/sanitizers/issues/468 4 // When the data race was reported, pthread_atfork() handler used to be 5 // executed which caused another race report in the same thread, which resulted 6 // in a deadlock. 7 #include "test.h" 8 9 int glob = 0; 10 11 void *worker(void *unused) { 12 barrier_wait(&barrier); 13 glob++; 14 return NULL; 15 } 16 17 void atfork() { 18 fprintf(stderr, "ATFORK\n"); 19 glob++; 20 } 21 22 int main() { 23 barrier_init(&barrier, 2); 24 pthread_atfork(atfork, NULL, NULL); 25 pthread_t t; 26 pthread_create(&t, NULL, worker, NULL); 27 glob++; 28 barrier_wait(&barrier); 29 pthread_join(t, NULL); 30 // CHECK: ThreadSanitizer: data race 31 // CHECK-NOT: ATFORK 32 return 0; 33 } 34