aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@protonmail.com>2020-03-11 16:10:28 +0100
committerWladimir J. van der Laan <laanwj@protonmail.com>2020-03-11 16:11:56 +0100
commitd20d5dc824269fff45bb6fc9dbf1a6ce811b8559 (patch)
tree7a818a46b27f87a6df07273df1973bdf8fb053a0
parent414f6c496d9c4c44a5251d88d4a63039de961524 (diff)
parentfab7d14ea5a4305317d66f35beb3225a07823d42 (diff)
downloadbitcoin-d20d5dc824269fff45bb6fc9dbf1a6ce811b8559.tar.xz
Merge #18285: test: Check that wait_until returns if time point is in the past
fab7d14ea5a4305317d66f35beb3225a07823d42 test: Check that wait_until returns if time point is in the past (MarcoFalke) Pull request description: Add an explicit regression test for the condvar bug (#18227), so that this doesn't happen again ACKs for top commit: laanwj: ACK fab7d14ea5a4305317d66f35beb3225a07823d42 Tree-SHA512: 6ec0d0b3945cae87a001e367af34cca1953a8082b4a0d9f8a20d30acd1f36363e98035d4eb173ff786cf6692d352d41f960633415c46394af042eb44e3b5ad71
-rw-r--r--src/test/scheduler_tests.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/test/scheduler_tests.cpp b/src/test/scheduler_tests.cpp
index 7d26840b73..caf9be5bd6 100644
--- a/src/test/scheduler_tests.cpp
+++ b/src/test/scheduler_tests.cpp
@@ -98,6 +98,24 @@ BOOST_AUTO_TEST_CASE(manythreads)
BOOST_CHECK_EQUAL(counterSum, 200);
}
+BOOST_AUTO_TEST_CASE(wait_until_past)
+{
+ std::condition_variable condvar;
+ Mutex mtx;
+ WAIT_LOCK(mtx, lock);
+
+ const auto no_wait= [&](const std::chrono::seconds& d) {
+ return condvar.wait_until(lock, std::chrono::system_clock::now() - d);
+ };
+
+ BOOST_CHECK(std::cv_status::timeout == no_wait(std::chrono::seconds{1}));
+ BOOST_CHECK(std::cv_status::timeout == no_wait(std::chrono::minutes{1}));
+ BOOST_CHECK(std::cv_status::timeout == no_wait(std::chrono::hours{1}));
+ BOOST_CHECK(std::cv_status::timeout == no_wait(std::chrono::hours{10}));
+ BOOST_CHECK(std::cv_status::timeout == no_wait(std::chrono::hours{100}));
+ BOOST_CHECK(std::cv_status::timeout == no_wait(std::chrono::hours{1000}));
+}
+
BOOST_AUTO_TEST_CASE(singlethreadedscheduler_ordered)
{
CScheduler scheduler;