Report early wakeup of condition_variable::wait_until as no_timeout
commit79a8b4c1d70287ac0e668c4f2335d70d97c3002e
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Aug 2018 15:39:45 +0000 (1 15:39 +0000)
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Aug 2018 15:39:45 +0000 (1 15:39 +0000)
tree1d909cf9f46064af55af5dae9bb10e0263463b8c
parente9b7408da790d67b1130b97147901c862d05a77c
Report early wakeup of condition_variable::wait_until as no_timeout

As currently implemented, condition_variable always ultimately waits
against std::chrono::system_clock. This clock can be changed in arbitrary
ways by the user which may result in us waking up too early or too late
when measured against the caller-supplied clock.

We can't (yet) do much about waking up too late (PR 41861), but
if we wake up too early we must return cv_status::no_timeout to indicate a
spurious wakeup rather than incorrectly returning cv_status::timeout.

2018-08-01  Mike Crowe  <mac@mcrowe.com>

* include/std/condition_variable (wait_until): Only report timeout
if we really have timed out when measured against the
caller-supplied clock.
* testsuite/30_threads/condition_variable/members/2.cc: Add test
case to confirm above behaviour.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263224 138bc75d-0d04-0410-961f-82ee72b054a4
libstdc++-v3/ChangeLog
libstdc++-v3/include/std/condition_variable
libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc