mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 13:57:35 +00:00
LibPthread: Use realtime clock for futex_wait()
If we get an absolute time passed to one of the pthread_*wait methods, this is not an absolute monotonic time but rather an absolute wall time. This means that we also need to pass FUTEX_CLOCK_REALTIME to the futex syscall to ensure we're not using the monotonic clock.
This commit is contained in:
parent
b630e39fbb
commit
d1f33ec795
1 changed files with 1 additions and 1 deletions
|
@ -442,7 +442,7 @@ static int futex_wait(uint32_t& futex_addr, uint32_t value, const struct timespe
|
||||||
{
|
{
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
// NOTE: FUTEX_WAIT takes a relative timeout, so use FUTEX_WAIT_BITSET instead!
|
// NOTE: FUTEX_WAIT takes a relative timeout, so use FUTEX_WAIT_BITSET instead!
|
||||||
int rc = futex(&futex_addr, FUTEX_WAIT_BITSET, value, abstime, nullptr, FUTEX_BITSET_MATCH_ANY);
|
int rc = futex(&futex_addr, FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, value, abstime, nullptr, FUTEX_BITSET_MATCH_ANY);
|
||||||
if (rc < 0 && errno == EAGAIN) {
|
if (rc < 0 && errno == EAGAIN) {
|
||||||
// If we didn't wait, that's not an error
|
// If we didn't wait, that's not an error
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue