| ... | @@ -160,6 +160,9 @@ pub fn maybeRefresh(self: *Progress) void { | ... | @@ -160,6 +160,9 @@ pub fn maybeRefresh(self: *Progress) void { |
| 160 | if (now < self.initial_delay_ns) return; | 160 | if (now < self.initial_delay_ns) return; |
| 161 | const held = self.update_lock.tryAcquire() orelse return; | 161 | const held = self.update_lock.tryAcquire() orelse return; |
| 162 | defer held.release(); | 162 | defer held.release(); |
| | 163 | // TODO I have observed this to happen sometimes. I think we need to follow Rust's |
| | 164 | // lead and guarantee monotonically increasing times in the std lib itself. |
| | 165 | if (now < self.prev_refresh_timestamp) return; |
| 163 | if (now - self.prev_refresh_timestamp < self.refresh_rate_ns) return; | 166 | if (now - self.prev_refresh_timestamp < self.refresh_rate_ns) return; |
| 164 | return self.refreshWithHeldLock(); | 167 | return self.refreshWithHeldLock(); |
| 165 | } | 168 | } |