1*0e2585c8SVitaly Buka // Regression test for https://github.com/google/sanitizers/issues/1259 2*0e2585c8SVitaly Buka // RUN: %clang_tsan -O1 %s -o %t && %run %t 3*0e2585c8SVitaly Buka // REQUIRES: glibc-2.30 || android-30 4*0e2585c8SVitaly Buka 5*0e2585c8SVitaly Buka #define _GNU_SOURCE 6*0e2585c8SVitaly Buka #include <pthread.h> 7*0e2585c8SVitaly Buka 8*0e2585c8SVitaly Buka pthread_cond_t cv; 9*0e2585c8SVitaly Buka pthread_mutex_t mtx; 10*0e2585c8SVitaly Buka fn(void * vp)11*0e2585c8SVitaly Bukavoid *fn(void *vp) { 12*0e2585c8SVitaly Buka pthread_mutex_lock(&mtx); 13*0e2585c8SVitaly Buka pthread_cond_signal(&cv); 14*0e2585c8SVitaly Buka pthread_mutex_unlock(&mtx); 15*0e2585c8SVitaly Buka return NULL; 16*0e2585c8SVitaly Buka } 17*0e2585c8SVitaly Buka main()18*0e2585c8SVitaly Bukaint main() { 19*0e2585c8SVitaly Buka pthread_mutex_lock(&mtx); 20*0e2585c8SVitaly Buka 21*0e2585c8SVitaly Buka pthread_t tid; 22*0e2585c8SVitaly Buka pthread_create(&tid, NULL, fn, NULL); 23*0e2585c8SVitaly Buka 24*0e2585c8SVitaly Buka struct timespec ts; 25*0e2585c8SVitaly Buka clock_gettime(CLOCK_MONOTONIC, &ts); 26*0e2585c8SVitaly Buka ts.tv_sec += 10; 27*0e2585c8SVitaly Buka pthread_cond_clockwait(&cv, &mtx, CLOCK_MONOTONIC, &ts); 28*0e2585c8SVitaly Buka pthread_mutex_unlock(&mtx); 29*0e2585c8SVitaly Buka 30*0e2585c8SVitaly Buka pthread_join(tid, NULL); 31*0e2585c8SVitaly Buka return 0; 32*0e2585c8SVitaly Buka } 33