aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
authorMike Crowe <mac@mcrowe.com>2018-08-01 15:39:57 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2018-08-01 16:39:57 +0100
commit9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7 (patch)
tree823a9f37c46670bcc8fb5298f87b86f0029d25d0 /libstdc++-v3/include
parent2f5934326542b3f303db91cc4cd432cd488f0258 (diff)
downloadgcc-9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7.zip
gcc-9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7.tar.gz
gcc-9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7.tar.bz2
Use steady_clock to implement condition_variable::wait_for
The C++ standard says that std::condition_variable::wait_for should be implemented to be equivalent to: return wait_until(lock, chrono::steady_clock::now() + rel_time); But the existing implementation uses chrono::system_clock. Now that wait_until has potentially-different behaviour for chrono::steady_clock, let's at least try to wait using the correct clock. 2018-08-01 Mike Crowe <mac@mcrowe.com> * include/std/condition_variable (wait_for): Use steady_clock. From-SVN: r263225
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r--libstdc++-v3/include/std/condition_variable5
1 files changed, 3 insertions, 2 deletions
diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable
index c00afa2..1f84ea3 100644
--- a/libstdc++-v3/include/std/condition_variable
+++ b/libstdc++-v3/include/std/condition_variable
@@ -66,6 +66,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class condition_variable
{
typedef chrono::system_clock __clock_t;
+ typedef chrono::steady_clock __steady_clock_t;
typedef __gthread_cond_t __native_type;
#ifdef __GTHREAD_COND_INIT
@@ -144,11 +145,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
wait_for(unique_lock<mutex>& __lock,
const chrono::duration<_Rep, _Period>& __rtime)
{
- using __dur = typename __clock_t::duration;
+ using __dur = typename __steady_clock_t::duration;
auto __reltime = chrono::duration_cast<__dur>(__rtime);
if (__reltime < __rtime)
++__reltime;
- return wait_until(__lock, __clock_t::now() + __reltime);
+ return wait_until(__lock, __steady_clock_t::now() + __reltime);
}
template<typename _Rep, typename _Period, typename _Predicate>