When adding an element to the dynamic headers table, the oldest
ones may get evicted. When multiple elements get evicted, they
should get evicted all at once with drain, instead of one by one
as there will be a massive move each time.
Ticket: #6103
} else {
dyn_headers.table.push(headcopy);
}
+ let mut toremove = 0;
while dyn_headers.current_size > dyn_headers.max_size
- && !dyn_headers.table.is_empty()
+ && toremove < dyn_headers.table.len()
{
dyn_headers.current_size -=
- 32 + dyn_headers.table[0].name.len() + dyn_headers.table[0].value.len();
- dyn_headers.table.remove(0);
+ 32 + dyn_headers.table[toremove].name.len() + dyn_headers.table[toremove].value.len();
+ toremove += 1;
}
+ dyn_headers.table.drain(0..toremove);
}
return Ok((r, head));
}