net: extend packet by doubling fragment vector size

Avoid quadratic behavior
This commit is contained in:
Avi Kivity
2014-09-22 14:26:34 +03:00
parent 4ca2d67406
commit 7f7a550f98

View File

@@ -77,7 +77,9 @@ class packet final {
if (old->_allocated_frags >= old->_nr_frags + extra_frags) {
return std::move(old);
}
auto n = allocate(old->_nr_frags + extra_frags);
auto nr = std::max<size_t>(old->_nr_frags + extra_frags,
2 * old->_nr_frags);
auto n = allocate(nr);
n->_deleter = std::move(old->_deleter);
n->_len = old->_len;
n->_nr_frags = old->_nr_frags;