tokio-timer: fix DelayQueue bug when inserting shorter delay (#863)

Reset the delay of the queue in case an item that expires sooner than the last inserted is put
into the queue.
This commit is contained in:
Zahari Dichev
2019-01-24 14:36:41 -08:00
committed by Carl Lerche
parent fbad6297c5
commit 12546d1d9c
2 changed files with 42 additions and 0 deletions
+10
View File
@@ -338,6 +338,16 @@ impl<T> DelayQueue<T> {
self.insert_idx(when, key);
// Set a new delay if the current's deadline is later than the one of the new item
let should_set_delay = if let Some(ref delay) = self.delay {
let current_exp = self.normalize_deadline(delay.deadline());
current_exp > when
} else { false };
if should_set_delay {
self.delay = Some(self.handle.delay(self.start + Duration::from_millis(when)));
}
Key::new(key)
}