From 941d0a756a0d5b37edaa6d0332ae46f0bc32cded Mon Sep 17 00:00:00 2001 From: Kuba Brecka Date: Tue, 24 Nov 2015 13:28:27 +0000 Subject: [tsan] Replace pthread semaphore in signal_cond.cc with barrier_wait Pthread semaphores are not available on OS X. Let's replace sem_wait/sem_post with barrier_wait, which makes the test pass on OS X. I know that sem_wait/sem_post is intercepted by TSan, whereas barrier_wait is TSan-invisible, but the purpose of the test is not affected by this. Also, let's properly initialize the mutex and cond variables. Differential Revision: http://reviews.llvm.org/D14924 llvm-svn: 253980 --- compiler-rt/test/tsan/signal_cond.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'compiler-rt/test/tsan/signal_cond.cc') diff --git a/compiler-rt/test/tsan/signal_cond.cc b/compiler-rt/test/tsan/signal_cond.cc index f5eae745d40..ff565ea4fff 100644 --- a/compiler-rt/test/tsan/signal_cond.cc +++ b/compiler-rt/test/tsan/signal_cond.cc @@ -11,12 +11,11 @@ int g_thread_run = 1; pthread_mutex_t mutex; pthread_cond_t cond; -sem_t sem; void sig_handler(int sig) { (void)sig; write(1, "SIGNAL\n", sizeof("SIGNAL\n") - 1); - sem_post(&sem); + barrier_wait(&barrier); } void* my_thread(void* arg) { @@ -28,7 +27,11 @@ void* my_thread(void* arg) { } int main() { - sem_init(&sem, 0, 0); + barrier_init(&barrier, 2); + + pthread_mutex_init(&mutex, 0); + pthread_cond_init(&cond, 0); + signal(SIGUSR1, &sig_handler); pthread_t thr; pthread_create(&thr, 0, &my_thread, 0); @@ -36,8 +39,7 @@ int main() { // (can't use barrier_wait for that) sleep(1); pthread_kill(thr, SIGUSR1); - while (sem_wait(&sem) == -1 && errno == EINTR) { - } + barrier_wait(&barrier); pthread_mutex_lock(&mutex); g_thread_run = 0; pthread_cond_signal(&cond); -- cgit v1.2.3