From d95ca09be4f47fb819a04439263757c204622d21 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Thu, 1 Oct 2015 08:34:37 +0000 Subject: [PATCH] Attempt to prevent flaky thread.mutex tests by once again increasing timing tolerances git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@248993 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../thread.lock.shared.cons/mutex.pass.cpp | 4 ++-- .../thread.lock.shared.cons/mutex_duration.pass.cpp | 4 ++-- .../thread.lock.shared.cons/mutex_time_point.pass.cpp | 5 ++--- .../thread.lock.shared.locking/lock.pass.cpp | 4 ++-- .../thread.shared_mutex.class/lock.pass.cpp | 4 ++-- .../thread.shared_mutex.class/lock_shared.pass.cpp | 4 ++-- .../lock_shared.pass.cpp | 4 ++-- .../try_lock_for.pass.cpp | 5 ++--- .../try_lock_shared.pass.cpp | 11 ++++++++++- .../try_lock_shared_for.pass.cpp | 5 ++--- .../try_lock_shared_until.pass.cpp | 5 ++--- .../try_lock_until.pass.cpp | 5 ++--- test/support/test_macros.h | 5 +++++ 13 files changed, 37 insertions(+), 28 deletions(-) diff --git a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp index a61531f2..12bef34c 100644 --- a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp +++ b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp @@ -35,10 +35,10 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif std::shared_timed_mutex m; diff --git a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp index cf51cb61..84f868d6 100644 --- a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp +++ b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp @@ -38,10 +38,10 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif diff --git a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp index ea3ab54b..93597314 100644 --- a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp +++ b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp @@ -38,13 +38,12 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif - void f1() { time_point t0 = Clock::now(); diff --git a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp index a11ea344..d646550a 100644 --- a/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp +++ b/test/std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp @@ -37,10 +37,10 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(25); #else -ms Tolerance = ms(75); +ms Tolerance = ms(25 * 5); #endif diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp index 62cdf8e3..75ddebff 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp @@ -36,10 +36,10 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif void f() diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp index b8df2552..6b5089d3 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp @@ -37,10 +37,10 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif void f() diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp index 63d3f850..77a9107d 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp @@ -38,10 +38,10 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp index f4525a4f..320a268a 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp @@ -38,13 +38,12 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif - void f1() { time_point t0 = Clock::now(); diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp index 9c2d8c9c..3d5604d8 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp @@ -22,6 +22,8 @@ #include #include +#include "test_macros.h" + std::shared_timed_mutex m; typedef std::chrono::system_clock Clock; @@ -30,6 +32,13 @@ typedef Clock::duration duration; typedef std::chrono::milliseconds ms; typedef std::chrono::nanoseconds ns; + +#if !defined(TEST_HAS_SANITIZERS) +ms Tolerance = ms(200); +#else +ms Tolerance = ms(200 * 5); +#endif + void f() { time_point t0 = Clock::now(); @@ -41,7 +50,7 @@ void f() time_point t1 = Clock::now(); m.unlock_shared(); ns d = t1 - t0 - ms(250); - assert(d < ms(200)); // within 200ms + assert(d < Tolerance); // within tolerance } int main() diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp index 6066af50..4cdb5873 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp @@ -38,13 +38,12 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif - void f1() { time_point t0 = Clock::now(); diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp index 64164abb..f7ddbaee 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp @@ -38,13 +38,12 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif - void f1() { time_point t0 = Clock::now(); diff --git a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp index 60ad2f5e..1560af2c 100644 --- a/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp +++ b/test/std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp @@ -38,13 +38,12 @@ ms WaitTime = ms(250); // 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 !TEST_HAS_FEATURE(thread_sanitizer) +#if !defined(TEST_HAS_SANITIZERS) ms Tolerance = ms(50); #else -ms Tolerance = ms(100); +ms Tolerance = ms(50 * 5); #endif - void f1() { time_point t0 = Clock::now(); diff --git a/test/support/test_macros.h b/test/support/test_macros.h index 8602f528..420f4fac 100644 --- a/test/support/test_macros.h +++ b/test/support/test_macros.h @@ -96,4 +96,9 @@ template struct static_assert_check {}; #define TEST_HAS_NO_EXCEPTIONS #endif +#if TEST_HAS_FEATURE(address_sanitizer) || TEST_HAS_FEATURE(memory_sanitizer) || \ + TEST_HAS_FEATURE(thread_sanitizer) +#define TEST_HAS_SANITIZERS +#endif + #endif // SUPPORT_TEST_MACROS_HPP