about summary refs log tree commit diff
path: root/library/std/src/sys/unix/futex.rs
diff options
context:
space:
mode:
authorMara Bos <m-ou.se@m-ou.se>2022-03-24 11:11:31 +0100
committerMara Bos <m-ou.se@m-ou.se>2022-03-24 11:11:31 +0100
commitc9ae3fe68fc4477350476acb649b817a80bfd973 (patch)
treea11a9f393cf4a0e3069ad2b5bf97f272ba5481eb /library/std/src/sys/unix/futex.rs
parent23badeb4cb22afd09e0264348800e44cda80af38 (diff)
downloadrust-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.rs6
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.
             )