summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/source-manager/TestSourceManager.py
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2019-09-16 17:57:48 +0000
committerDan Albert <danalbert@google.com>2019-09-16 17:57:48 +0000
commit5e37d7f9ff257ec62d733d3d94b11f03e0fe51ca (patch)
treef4af4ede926be38fda3e28290cb730b12d6faa81 /lldb/packages/Python/lldbsuite/test/source-manager/TestSourceManager.py
parent6fcd4e080f09c9765d6e0ea03b1da91669c8509a (diff)
downloadbcm5719-llvm-5e37d7f9ff257ec62d733d3d94b11f03e0fe51ca.tar.gz
bcm5719-llvm-5e37d7f9ff257ec62d733d3d94b11f03e0fe51ca.zip
Implement std::condition_variable via pthread_cond_clockwait() where available
std::condition_variable is currently implemented via pthread_cond_timedwait() on systems that use pthread. This is problematic, since that function waits by default on CLOCK_REALTIME and libc++ does not provide any mechanism to change from this default. Due to this, regardless of if condition_variable::wait_until() is called with a chrono::system_clock or chrono::steady_clock parameter, condition_variable::wait_until() will wait using CLOCK_REALTIME. This is not accurate to the C++ standard as calling condition_variable::wait_until() with a chrono::steady_clock parameter should use CLOCK_MONOTONIC. This is particularly problematic because CLOCK_REALTIME is a bad choice as it is subject to discontinuous time adjustments, that may cause condition_variable::wait_until() to immediately timeout or wait indefinitely. This change fixes this issue with a new POSIX function, pthread_cond_clockwait() proposed on http://austingroupbugs.net/view.php?id=1216. The new function is similar to pthread_cond_timedwait() with the addition of a clock parameter that allows it to wait using either CLOCK_REALTIME or CLOCK_MONOTONIC, thus allowing condition_variable::wait_until() to wait using CLOCK_REALTIME for chrono::system_clock and CLOCK_MONOTONIC for chrono::steady_clock. pthread_cond_clockwait() is implemented in glibc (2.30 and later) and Android's bionic (Android API version 30 and later). This change additionally makes wait_for() and wait_until() with clocks other than chrono::system_clock use CLOCK_MONOTONIC.<Paste> llvm-svn: 372016
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/source-manager/TestSourceManager.py')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud