From f4d82f0ad6b10881c0831595ad0e957094892a45 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 21 Dec 2020 20:44:36 -0700 Subject: [PATCH] std.Progress: work around time going backwards --- lib/std/Progress.zig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/std/Progress.zig b/lib/std/Progress.zig index ae9b1783be..6e683c673e 100644 --- a/lib/std/Progress.zig +++ b/lib/std/Progress.zig @@ -160,6 +160,9 @@ pub fn maybeRefresh(self: *Progress) void { if (now < self.initial_delay_ns) return; const held = self.update_lock.tryAcquire() orelse return; defer held.release(); + // TODO I have observed this to happen sometimes. I think we need to follow Rust's + // lead and guarantee monotonically increasing times in the std lib itself. + if (now < self.prev_refresh_timestamp) return; if (now - self.prev_refresh_timestamp < self.refresh_rate_ns) return; return self.refreshWithHeldLock(); }