diff options
author | 2019-11-18 20:07:06 +0000 | |
---|---|---|
committer | 2019-11-18 20:07:06 +0000 | |
commit | 8374fce0dfbc945f878b9c0f5525ce8d48aaa428 (patch) | |
tree | 3638bffb95fd61b32e2281e3336152f71eb7642f /src | |
parent | 725d5e1aa9d0276783765dcabe5430f03ea13dd5 (diff) | |
parent | ebd62215ff05bd0a43a17539e39b92fac8d024cb (diff) | |
download | rtic-8374fce0dfbc945f878b9c0f5525ce8d48aaa428.tar.gz rtic-8374fce0dfbc945f878b9c0f5525ce8d48aaa428.tar.zst rtic-8374fce0dfbc945f878b9c0f5525ce8d48aaa428.zip |
Merge #278
278: Cyccnt r=texitoi a=perlindgren
The subtractions in `elapsed` and `duration` may cause an overflow panic in debug mode. This is solved by using wrapping arithmetics.
Co-authored-by: Per Lindgren <per.lindgren@ltu.se>
Diffstat (limited to 'src')
-rw-r--r-- | src/cyccnt.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cyccnt.rs b/src/cyccnt.rs index 86969cb1..338bbbea 100644 --- a/src/cyccnt.rs +++ b/src/cyccnt.rs @@ -38,12 +38,14 @@ impl Instant { /// Returns the amount of time elapsed since this instant was created. pub fn elapsed(&self) -> Duration { - Instant::now() - *self + let diff = Instant::now().inner.wrapping_sub(self.inner); + assert!(diff >= 0, "instant now is earlier than self"); + Duration { inner: diff as u32 } } /// Returns the amount of time elapsed from another instant to this one. pub fn duration_since(&self, earlier: Instant) -> Duration { - let diff = self.inner - earlier.inner; + let diff = self.inner.wrapping_sub(earlier.inner); assert!(diff >= 0, "second instant is later than self"); Duration { inner: diff as u32 } } |