[libcxx-commits] [libcxx] e56e96a - [libcxx testing] Remove ALLOW_RETRIES from another test
David Zarzycki via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Jul 4 07:15:31 PDT 2020
Author: David Zarzycki
Date: 2020-07-04T10:15:21-04:00
New Revision: e56e96a264268a1df018f8b0a8c4caa18397a75d
URL: https://github.com/llvm/llvm-project/commit/e56e96a264268a1df018f8b0a8c4caa18397a75d
DIFF: https://github.com/llvm/llvm-project/commit/e56e96a264268a1df018f8b0a8c4caa18397a75d.diff
LOG: [libcxx testing] Remove ALLOW_RETRIES from another test
Added:
Modified:
libcxx/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp
Removed:
################################################################################
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 24c033d8a287..6a26f7ec66fd 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;
}
More information about the libcxx-commits
mailing list