simplifies quic::ConnectionTable::prune_oldest (#30995)
This commit is contained in:
parent
a2797ebfa9
commit
8a96b91515
|
@ -932,29 +932,19 @@ impl ConnectionTable {
|
||||||
|
|
||||||
fn prune_oldest(&mut self, max_size: usize) -> usize {
|
fn prune_oldest(&mut self, max_size: usize) -> usize {
|
||||||
let mut num_pruned = 0;
|
let mut num_pruned = 0;
|
||||||
while self.total_size > max_size {
|
let key = |(_, connections): &(_, &Vec<_>)| {
|
||||||
let mut oldest = std::u64::MAX;
|
connections.iter().map(ConnectionEntry::last_update).min()
|
||||||
let mut oldest_index = None;
|
};
|
||||||
for (index, (_key, connections)) in self.table.iter().enumerate() {
|
while self.total_size.saturating_sub(num_pruned) > max_size {
|
||||||
for entry in connections {
|
match self.table.values().enumerate().min_by_key(key) {
|
||||||
let last_update = entry.last_update();
|
None => break,
|
||||||
if last_update < oldest {
|
Some((index, connections)) => {
|
||||||
oldest = last_update;
|
num_pruned += connections.len();
|
||||||
oldest_index = Some(index);
|
self.table.swap_remove_index(index);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(oldest_index) = oldest_index {
|
|
||||||
if let Some((_, removed)) = self.table.swap_remove_index(oldest_index) {
|
|
||||||
self.total_size -= removed.len();
|
|
||||||
num_pruned += removed.len();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// No valid entries in the table. Continuing the loop will cause
|
|
||||||
// infinite looping.
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
self.total_size = self.total_size.saturating_sub(num_pruned);
|
||||||
num_pruned
|
num_pruned
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue