1*bcaeed49SFangrui Song // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s 2*bcaeed49SFangrui Song // UNSUPPORTED: darwin 3*bcaeed49SFangrui Song #include <pthread.h> 4*bcaeed49SFangrui Song #include <stdio.h> 5*bcaeed49SFangrui Song #include <stdlib.h> 6*bcaeed49SFangrui Song #include <signal.h> 7*bcaeed49SFangrui Song #include <sys/types.h> 8*bcaeed49SFangrui Song #include <sys/time.h> 9*bcaeed49SFangrui Song #include <unistd.h> 10*bcaeed49SFangrui Song #include <errno.h> 11*bcaeed49SFangrui Song 12*bcaeed49SFangrui Song volatile int X; 13*bcaeed49SFangrui Song handler(int sig)14*bcaeed49SFangrui Songstatic void handler(int sig) { 15*bcaeed49SFangrui Song (void)sig; 16*bcaeed49SFangrui Song if (X != 0) 17*bcaeed49SFangrui Song printf("bad"); 18*bcaeed49SFangrui Song } 19*bcaeed49SFangrui Song thr(void * p)20*bcaeed49SFangrui Songstatic void* thr(void *p) { 21*bcaeed49SFangrui Song return 0; 22*bcaeed49SFangrui Song } 23*bcaeed49SFangrui Song main()24*bcaeed49SFangrui Songint main() { 25*bcaeed49SFangrui Song struct sigaction act = {}; 26*bcaeed49SFangrui Song act.sa_handler = &handler; 27*bcaeed49SFangrui Song if (sigaction(SIGPROF, &act, 0)) { 28*bcaeed49SFangrui Song perror("sigaction"); 29*bcaeed49SFangrui Song exit(1); 30*bcaeed49SFangrui Song } 31*bcaeed49SFangrui Song 32*bcaeed49SFangrui Song itimerval t; 33*bcaeed49SFangrui Song t.it_value.tv_sec = 0; 34*bcaeed49SFangrui Song t.it_value.tv_usec = 10; 35*bcaeed49SFangrui Song t.it_interval = t.it_value; 36*bcaeed49SFangrui Song if (setitimer(ITIMER_PROF, &t, 0)) { 37*bcaeed49SFangrui Song perror("setitimer"); 38*bcaeed49SFangrui Song exit(1); 39*bcaeed49SFangrui Song } 40*bcaeed49SFangrui Song 41*bcaeed49SFangrui Song for (int i = 0; i < 10000; i++) { 42*bcaeed49SFangrui Song pthread_t th; 43*bcaeed49SFangrui Song pthread_create(&th, 0, thr, 0); 44*bcaeed49SFangrui Song pthread_join(th, 0); 45*bcaeed49SFangrui Song } 46*bcaeed49SFangrui Song 47*bcaeed49SFangrui Song fprintf(stderr, "DONE\n"); 48*bcaeed49SFangrui Song return 0; 49*bcaeed49SFangrui Song } 50*bcaeed49SFangrui Song 51*bcaeed49SFangrui Song // CHECK-NOT: WARNING: ThreadSanitizer: 52*bcaeed49SFangrui Song // CHECK: DONE 53*bcaeed49SFangrui Song // CHECK-NOT: WARNING: ThreadSanitizer: 54