diff options
author | Mehdi Amini <mehdi.amini@apple.com> | 2015-12-19 22:56:24 +0000 |
---|---|---|
committer | Mehdi Amini <mehdi.amini@apple.com> | 2015-12-19 22:56:24 +0000 |
commit | fa4e474741bb73f427412d06b4165216ed810efb (patch) | |
tree | 30d6306bf1909dede736d19f839f7b74f1e9a848 /llvm/unittests/Support/ThreadPool.cpp | |
parent | ab0626e35f2bf7cde2d51ffd9bf20810404d7f0f (diff) | |
download | bcm5719-llvm-fa4e474741bb73f427412d06b4165216ed810efb.tar.gz bcm5719-llvm-fa4e474741bb73f427412d06b4165216ed810efb.zip |
ThreadPool unittests: do not hold mutex when calling condition_variable:notify()
From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 256111
Diffstat (limited to 'llvm/unittests/Support/ThreadPool.cpp')
-rw-r--r-- | llvm/unittests/Support/ThreadPool.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/llvm/unittests/Support/ThreadPool.cpp b/llvm/unittests/Support/ThreadPool.cpp index b0307d1f16a..0f36c383d49 100644 --- a/llvm/unittests/Support/ThreadPool.cpp +++ b/llvm/unittests/Support/ThreadPool.cpp @@ -62,12 +62,16 @@ protected: } /// Set the readiness of the main thread. - void setMainThreadReadyState(bool Ready) { - std::unique_lock<std::mutex> LockGuard(WaitMainThreadMutex); - MainThreadReady = Ready; + void setMainThreadReady() { + { + std::unique_lock<std::mutex> LockGuard(WaitMainThreadMutex); + MainThreadReady = true; + } WaitMainThread.notify_all(); } + void SetUp() override { MainThreadReady = false; } + std::condition_variable WaitMainThread; std::mutex WaitMainThreadMutex; bool MainThreadReady; @@ -86,7 +90,6 @@ TEST_F(ThreadPoolTest, AsyncBarrier) { std::atomic_int checked_in{0}; - setMainThreadReadyState(false); ThreadPool Pool; for (size_t i = 0; i < 5; ++i) { Pool.async([this, &checked_in, i] { @@ -95,7 +98,7 @@ TEST_F(ThreadPoolTest, AsyncBarrier) { }); } ASSERT_EQ(0, checked_in); - setMainThreadReadyState(true); + setMainThreadReady(); Pool.wait(); ASSERT_EQ(5, checked_in); } @@ -119,14 +122,13 @@ TEST_F(ThreadPoolTest, Async) { CHECK_UNSUPPORTED(); ThreadPool Pool; std::atomic_int i{0}; - setMainThreadReadyState(false); Pool.async([this, &i] { waitForMainThread(); ++i; }); Pool.async([&i] { ++i; }); ASSERT_NE(2, i.load()); - setMainThreadReadyState(true); + setMainThreadReady(); Pool.wait(); ASSERT_EQ(2, i.load()); } @@ -135,7 +137,6 @@ TEST_F(ThreadPoolTest, GetFuture) { CHECK_UNSUPPORTED(); ThreadPool Pool; std::atomic_int i{0}; - setMainThreadReadyState(false); Pool.async([this, &i] { waitForMainThread(); ++i; @@ -143,7 +144,7 @@ TEST_F(ThreadPoolTest, GetFuture) { // Force the future using get() Pool.async([&i] { ++i; }).get(); ASSERT_NE(2, i.load()); - setMainThreadReadyState(true); + setMainThreadReady(); Pool.wait(); ASSERT_EQ(2, i.load()); } @@ -153,7 +154,6 @@ TEST_F(ThreadPoolTest, PoolDestruction) { // Test that we are waiting on destruction std::atomic_int checked_in{0}; { - setMainThreadReadyState(false); ThreadPool Pool; for (size_t i = 0; i < 5; ++i) { Pool.async([this, &checked_in, i] { @@ -162,7 +162,7 @@ TEST_F(ThreadPoolTest, PoolDestruction) { }); } ASSERT_EQ(0, checked_in); - setMainThreadReadyState(true); + setMainThreadReady(); } ASSERT_EQ(5, checked_in); } |