diff options
Diffstat (limited to 'libcxx/include/thread')
-rw-r--r-- | libcxx/include/thread | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/libcxx/include/thread b/libcxx/include/thread index d81e8537888..94e7ab6c54c 100644 --- a/libcxx/include/thread +++ b/libcxx/include/thread @@ -410,10 +410,20 @@ void sleep_for(const chrono::duration<_Rep, _Period>& __d) { using namespace chrono; - nanoseconds __ns = duration_cast<nanoseconds>(__d); - if (__ns < __d) - ++__ns; - sleep_for(__ns); + if (__d > duration<_Rep, _Period>::zero()) + { + _LIBCPP_CONSTEXPR duration<long double> _Max = nanoseconds::max(); + nanoseconds __ns; + if (__d < _Max) + { + __ns = duration_cast<nanoseconds>(__d); + if (__ns < __d) + ++__ns; + } + else + __ns = nanoseconds::max(); + sleep_for(__ns); + } } template <class _Clock, class _Duration> |