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
(cherry picked from commit
635073688289aa9a4928f78cdfd1777ae21f7d40)
} else {
dyn_headers.table.push(headcopy);
}
- while dyn_headers.current_size > dyn_headers.max_size && dyn_headers.table.len() > 0
+ let mut toremove = 0;
+ while dyn_headers.current_size > dyn_headers.max_size
+ && 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));
}