From: Evgenii Stepanov Date: Thu, 28 May 2020 21:30:19 +0000 (-0700) Subject: [scudo] Fix deadlock in ScudoWrappersCTest.DisableForkEnable test. X-Git-Tag: llvmorg-12-init~4801 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=519959ad825bfad0b62a2012c064e582788d8f21;p=platform%2Fupstream%2Fllvm.git [scudo] Fix deadlock in ScudoWrappersCTest.DisableForkEnable test. pthread_cond_wait needs a loop around it to handle spurious wake ups, as well as the case when signal runs before wait. --- diff --git a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp index 8b2bc6e..b41908c 100644 --- a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp +++ b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp @@ -372,6 +372,7 @@ TEST(ScudoWrappersCTest, Fork) { static pthread_mutex_t Mutex; static pthread_cond_t Conditional = PTHREAD_COND_INITIALIZER; +static bool Ready; static void *enableMalloc(void *Unused) { // Initialize the allocator for this thread. @@ -382,6 +383,7 @@ static void *enableMalloc(void *Unused) { // Signal the main thread we are ready. pthread_mutex_lock(&Mutex); + Ready = true; pthread_cond_signal(&Conditional); pthread_mutex_unlock(&Mutex); @@ -398,7 +400,8 @@ TEST(ScudoWrappersCTest, DisableForkEnable) { // Wait for the thread to be warmed up. pthread_mutex_lock(&Mutex); - pthread_cond_wait(&Conditional, &Mutex); + while (!Ready) + pthread_cond_wait(&Conditional, &Mutex); pthread_mutex_unlock(&Mutex); // Disable the allocator and fork. fork should succeed after malloc_enable.