fix(client): prevent panicking when determine Expiration in pool
On some OSes, `Instant` would start counting 0 from the boot time. That would mean that any `Instant::now() - dur` soon after boot had a higher risk of overflowing. Now, the expiration is determined by calling `idle.elapsed()`, and comparing durations. Closes #1215
This commit is contained in:
@@ -260,16 +260,16 @@ impl<T: Clone> Future for Checkout<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Expiration(Option<Instant>);
|
struct Expiration(Option<Duration>);
|
||||||
|
|
||||||
impl Expiration {
|
impl Expiration {
|
||||||
fn new(dur: Option<Duration>) -> Expiration {
|
fn new(dur: Option<Duration>) -> Expiration {
|
||||||
Expiration(dur.map(|dur| Instant::now() - dur))
|
Expiration(dur)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn expires(&self, instant: Instant) -> bool {
|
fn expires(&self, instant: Instant) -> bool {
|
||||||
match self.0 {
|
match self.0 {
|
||||||
Some(expire) => expire > instant,
|
Some(timeout) => instant.elapsed() > timeout,
|
||||||
None => false,
|
None => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user