Skip to content

Commit 9cc0348

Browse files
committed
add documentation
1 parent 70d551a commit 9cc0348

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

library/std/src/time.rs

+25-1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,28 @@ pub use core::time::Duration;
103103
/// > structure cannot represent the new point in time.
104104
///
105105
/// [`add`]: Instant::add
106+
///
107+
/// ## Reliability
108+
///
109+
/// On platforms where the underlying system call's API contract guarantees monotonicity
110+
/// Instant may rely on that property. Otherwise it will add its own synchronization
111+
/// to ensure monotonicity. Sometimes operating system guarantees are broken by hardware
112+
/// or virtualization bugs. This can manifest in Duration between an older and newer Instant
113+
/// appearing to be negative which results in a panic.
114+
///
115+
/// On windows and some unix systems you can override rust's choice to add
116+
/// its own synchronization or rely on the operating system by setting the environment variable
117+
/// `RUST_CLOCK_ASSUME_MONOTONIC` to `1` (trust the system-provided time) or `0`
118+
/// (apply additional synchronization). The value of the variable is only read
119+
/// the first time an Instant is created. Altering it later will have no effect.
120+
///
121+
/// > Note: The environment variable is experimental and meant to diagnose bugs.
122+
/// > It is not part of the normal Rust stability guarantees.
123+
///
124+
/// If you encounter a case where additional synchronization is necessary please
125+
/// [file an issue]
126+
///
127+
/// [file an issue]: https://github.com/rust-lang/rust/issues
106128
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
107129
#[stable(feature = "time2", since = "1.8.0")]
108130
pub struct Instant(time::Instant);
@@ -327,7 +349,9 @@ impl Instant {
327349
///
328350
/// This function may panic if the current time is earlier than this
329351
/// instant, which is something that can happen if an `Instant` is
330-
/// produced synthetically.
352+
/// produced synthetically or due to [hardware bugs]
353+
///
354+
/// [hardware bugs]: Instant#reliability
331355
///
332356
/// # Examples
333357
///

0 commit comments

Comments
 (0)