diff options
| author | Mara Bos <m-ou.se@m-ou.se> | 2022-03-24 11:11:31 +0100 |
|---|---|---|
| committer | Mara Bos <m-ou.se@m-ou.se> | 2022-03-24 11:11:31 +0100 |
| commit | c9ae3fe68fc4477350476acb649b817a80bfd973 (patch) | |
| tree | a11a9f393cf4a0e3069ad2b5bf97f272ba5481eb /library/std/src/sys/unix/futex.rs | |
| parent | 23badeb4cb22afd09e0264348800e44cda80af38 (diff) | |
| download | rust-c9ae3fe68fc4477350476acb649b817a80bfd973.tar.gz rust-c9ae3fe68fc4477350476acb649b817a80bfd973.zip | |
Explicitly use CLOCK_MONOTONIC in futex_wait.
Instant might be changed to use CLOCK_BOOTTIME at some point.
Diffstat (limited to 'library/std/src/sys/unix/futex.rs')
| -rw-r--r-- | library/std/src/sys/unix/futex.rs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/library/std/src/sys/unix/futex.rs b/library/std/src/sys/unix/futex.rs index adb661d877b..b82a4a73440 100644 --- a/library/std/src/sys/unix/futex.rs +++ b/library/std/src/sys/unix/futex.rs @@ -9,13 +9,13 @@ use crate::time::Duration; #[cfg(any(target_os = "linux", target_os = "android"))] pub fn futex_wait(futex: &AtomicI32, expected: i32, timeout: Option<Duration>) -> bool { - use super::time::Instant; + use super::time::Timespec; use crate::ptr::null; use crate::sync::atomic::Ordering::Relaxed; // Calculate the timeout as an absolute timespec. let timespec = - timeout.and_then(|d| Some(Instant::now().checked_add_duration(&d)?.as_timespec())); + timeout.and_then(|d| Some(Timespec::now(libc::CLOCK_MONOTONIC).checked_add_duration(&d)?)); loop { // No need to wait if the value already changed. @@ -31,7 +31,7 @@ pub fn futex_wait(futex: &AtomicI32, expected: i32, timeout: Option<Duration>) - futex as *const AtomicI32, libc::FUTEX_WAIT_BITSET | libc::FUTEX_PRIVATE_FLAG, expected, - timespec.as_ref().map_or(null(), |d| d as *const libc::timespec), + timespec.as_ref().map_or(null(), |t| &t.t as *const libc::timespec), null::<u32>(), // This argument is unused for FUTEX_WAIT_BITSET. !0u32, // A full bitmask, to make it behave like a regular FUTEX_WAIT. ) |
