diff options
author | David Zarzycki <dave@znu.io> | 2020-07-04 10:13:46 -0400 |
---|---|---|
committer | David Zarzycki <dave@znu.io> | 2020-07-04 10:15:21 -0400 |
commit | e56e96a264268a1df018f8b0a8c4caa18397a75d (patch) | |
tree | 61c8c35423d4b7534989b9c4eae80c08d0f28213 | |
parent | 7bfe4102a99d7dc5520d1ca1695afbfd82dfd4f5 (diff) | |
download | llvm-e56e96a264268a1df018f8b0a8c4caa18397a75d.zip llvm-e56e96a264268a1df018f8b0a8c4caa18397a75d.tar.gz llvm-e56e96a264268a1df018f8b0a8c4caa18397a75d.tar.bz2 |
[libcxx testing] Remove ALLOW_RETRIES from another test
-rw-r--r-- | libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp | 80 |
1 files changed, 37 insertions, 43 deletions
diff --git a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp index 24c033d..6a26f7e 100644 --- a/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp +++ b/libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp @@ -10,8 +10,6 @@ // UNSUPPORTED: c++03, c++11 // XFAIL: dylib-has-no-shared_mutex -// ALLOW_RETRIES: 2 - // <shared_mutex> // class shared_timed_mutex; @@ -35,59 +33,55 @@ typedef Clock::duration duration; typedef std::chrono::milliseconds ms; typedef std::chrono::nanoseconds ns; -ms WaitTime = ms(250); +ms LongTime = ms(5000); +ms ShortTime = ms(50); + +static constexpr unsigned Threads = 5; -// Thread sanitizer causes more overhead and will sometimes cause this test -// to fail. To prevent this we give Thread sanitizer more time to complete the -// test. -#if !defined(TEST_HAS_SANITIZERS) -ms Tolerance = ms(50); -#else -ms Tolerance = ms(50 * 5); -#endif +std::atomic<unsigned> CountDown = Threads; void f1() { - time_point t0 = Clock::now(); - std::shared_lock<std::shared_timed_mutex> lk(m, Clock::now() + WaitTime + Tolerance); - assert(lk.owns_lock() == true); - time_point t1 = Clock::now(); - ns d = t1 - t0 - WaitTime; - assert(d < Tolerance); // within 50ms + --CountDown; + time_point t0 = Clock::now(); + std::shared_lock<std::shared_timed_mutex> lk(m, t0 + LongTime); + time_point t1 = Clock::now(); + assert(lk.owns_lock() == true); + assert(t1 - t0 <= LongTime); } void f2() { - time_point t0 = Clock::now(); - std::shared_lock<std::shared_timed_mutex> lk(m, Clock::now() + WaitTime); - assert(lk.owns_lock() == false); - time_point t1 = Clock::now(); - ns d = t1 - t0 - WaitTime; - assert(d < Tolerance); // within 50ms + time_point t0 = Clock::now(); + std::shared_lock<std::shared_timed_mutex> lk(m, t0 + ShortTime); + time_point t1 = Clock::now(); + assert(lk.owns_lock() == false); + assert(t1 - t0 >= ShortTime); } int main(int, char**) { - { - m.lock(); - std::vector<std::thread> v; - for (int i = 0; i < 5; ++i) - v.push_back(std::thread(f1)); - std::this_thread::sleep_for(WaitTime); - m.unlock(); - for (auto& t : v) - t.join(); - } - { - m.lock(); - std::vector<std::thread> v; - for (int i = 0; i < 5; ++i) - v.push_back(std::thread(f2)); - std::this_thread::sleep_for(WaitTime + Tolerance); - m.unlock(); - for (auto& t : v) - t.join(); - } + { + m.lock(); + std::vector<std::thread> v; + for (unsigned i = 0; i < Threads; ++i) + v.push_back(std::thread(f1)); + while (CountDown > 0) + std::this_thread::yield(); + std::this_thread::sleep_for(ShortTime); + m.unlock(); + for (auto& t : v) + t.join(); + } + { + m.lock(); + std::vector<std::thread> v; + for (unsigned i = 0; i < Threads; ++i) + v.push_back(std::thread(f2)); + for (auto& t : v) + t.join(); + m.unlock(); + } return 0; } |