time: update deadline on removal in DelayQueue (#4178)

This commit is contained in:
Alice Ryhl
2021-10-22 20:34:36 +02:00
committed by GitHub
parent 2734fa9a85
commit e04b5be1f5
2 changed files with 21 additions and 0 deletions
+11
View File
@@ -498,9 +498,20 @@ impl<T> DelayQueue<T> {
/// # }
/// ```
pub fn remove(&mut self, key: &Key) -> Expired<T> {
let prev_deadline = self.next_deadline();
self.remove_key(key);
let data = self.slab.remove(key.index);
let next_deadline = self.next_deadline();
if prev_deadline != next_deadline {
match (next_deadline, &mut self.delay) {
(None, _) => self.delay = None,
(Some(deadline), Some(delay)) => delay.as_mut().reset(deadline),
(Some(deadline), None) => self.delay = Some(Box::pin(sleep_until(deadline))),
}
}
Expired {
key: Key::new(key.index),
data: data.inner,