Skip to content

Commit

Permalink
Handle monotonic clock going backwards during runtime
Browse files Browse the repository at this point in the history
We've had some users complain that `duration_since` is panic'ing
for them. This is possible if the machine being run on is buggy and
the "monotonic clock" goes backwards, which sadly some ancient
systems can do.

Rust addressed this issue in 1.60 by forcing
`Instant::duration_since` to not panic if the machine is buggy
(and time goes backwards), but for users on older rust versions we
do the same by hand here.
  • Loading branch information
TheBlueMatt committed Sep 2, 2022
1 parent 36bffb5 commit 82474d3
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion lightning/src/util/time.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,12 @@ impl Time for std::time::Instant {
}

fn duration_since(&self, earlier: Self) -> Duration {
self.duration_since(earlier)
// On rust prior to 1.60 `Instant::duration_since` will panic if time goes backwards.
// However, we support rust versions prior to 1.60 and some users appear to have "monotonic
// clocks" that go backwards in practice (likely relatively ancient kernels/etc). Thus, we
// manually check for time going backwards here and return a duration of zero in that case.
let now = Self::now();
if now > earlier { now - earlier } else { Duration::from_secs(0) }
}

fn duration_since_epoch() -> Duration {
Expand Down

0 comments on commit 82474d3

Please sign in to comment.