diff --git a/src/dns.c b/src/dns.c index b38f58bed..b53e3b6fb 100644 --- a/src/dns.c +++ b/src/dns.c @@ -1573,6 +1573,7 @@ static struct dns_resolution *dns_pick_resolution(struct dns_resolvers *resolver static void dns_free_resolution(struct dns_resolution *resolution) { struct dns_requester *req, *reqback; + struct dns_answer_item *item, *itemback; /* clean up configuration */ dns_reset_resolution(resolution); @@ -1584,6 +1585,16 @@ static void dns_free_resolution(struct dns_resolution *resolution) req->resolution = NULL; } + list_for_each_entry_safe(item, itemback, &resolution->response.ar_list, list) { + LIST_DEL(&item->list); + pool_free(dns_answer_item_pool, item); + } + + list_for_each_entry_safe(item, itemback, &resolution->response.answer_list, list) { + LIST_DEL(&item->list); + pool_free(dns_answer_item_pool, item); + } + LIST_DEL(&resolution->list); pool_free(dns_resolution_pool, resolution); }