PR libstdc++/80538 Only call sleep for non-zero values
commitcfef4c324ac300c0ad120f0fcee376159de84a0c
authorJonathan Wakely <jwakely@redhat.com>
Thu, 11 Oct 2018 16:37:23 +0000 (11 17:37 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 11 Oct 2018 16:37:23 +0000 (11 17:37 +0100)
tree9b0e03e36a75417b591a69a6f9f7405dbbc6f053
parent2045ae1d3f511717c2a1223148ce63f71800e1dd
PR libstdc++/80538 Only call sleep for non-zero values

Avoid a system call when no sleep is required. Sleep in a loop (actually
two loops) to handle interruption by signals.

PR libstdc++/80538
* src/c++11/thread.cc (this_thread::__sleep_for)
[_GLIBCXX_HAVE_SLEEP]: Only call sleep for non-zero values.
Loop while sleep call is interrupted and until steady_clock
shows requested duration has elapsed.
(!_GLIBCXX_HAVE_USLEEP]: Use the _GLIBCXX_HAVE_SLEEP code path, but
avoiding the usleep call.
* testsuite/30_threads/this_thread/60421.cc: Test repeated
signal interruptions.

From-SVN: r265044
libstdc++-v3/ChangeLog
libstdc++-v3/src/c++11/thread.cc
libstdc++-v3/testsuite/30_threads/this_thread/60421.cc