resolved: grow DnsAnswer exponentially
When increasing the DnsAnswer array, don't operate piecemeal, grow the array exponentially. This way, the default logic for DnsAnswer allocations matches the behaviour for GREEDY_REALLOC and suchlike, and we can reduce the number of necessary allocations.
This commit is contained in:
parent
48d5616b92
commit
2f763887b8
|
@ -271,6 +271,8 @@ void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) {
|
|||
int dns_answer_reserve(DnsAnswer **a, unsigned n_free) {
|
||||
DnsAnswer *n;
|
||||
|
||||
assert(a);
|
||||
|
||||
if (n_free <= 0)
|
||||
return 0;
|
||||
|
||||
|
@ -285,6 +287,9 @@ int dns_answer_reserve(DnsAnswer **a, unsigned n_free) {
|
|||
if ((*a)->n_allocated >= ns)
|
||||
return 0;
|
||||
|
||||
/* Allocate more than we need */
|
||||
ns *= 2;
|
||||
|
||||
n = realloc(*a, offsetof(DnsAnswer, items) + sizeof(DnsAnswerItem) * ns);
|
||||
if (!n)
|
||||
return -ENOMEM;
|
||||
|
|
Loading…
Reference in a new issue