1// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s 2// Regression test for 3// https://code.google.com/p/thread-sanitizer/issues/detail?id=61 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 <pthread.h> 8#include <stdio.h> 9#include <unistd.h> 10 11int glob = 0; 12 13void *worker(void *unused) { 14 sleep(1); 15 glob++; 16 return NULL; 17} 18 19void atfork() { 20 fprintf(stderr, "ATFORK\n"); 21 glob++; 22} 23 24int main() { 25 pthread_atfork(atfork, NULL, NULL); 26 pthread_t t; 27 pthread_create(&t, NULL, worker, NULL); 28 glob++; 29 pthread_join(t, NULL); 30 // CHECK: ThreadSanitizer: data race 31 // CHECK-NOT: ATFORK 32 return 0; 33} 34