MINOR: resolvers: Use a function to remove answers attached to a resolution
resolv_purge_resolution_answer_records() must be used to removed all answers
attached to a resolution. For now, it is only used when a resolution is
released.
diff --git a/include/haproxy/resolvers.h b/include/haproxy/resolvers.h
index 7dc8819..34bc0fb 100644
--- a/include/haproxy/resolvers.h
+++ b/include/haproxy/resolvers.h
@@ -43,6 +43,7 @@
void **newip, short *newip_sin_family,
void *owner);
+void resolv_purge_resolution_answer_records(struct resolv_resolution *resolution);
int resolv_link_resolution(void *requester, int requester_type, int requester_locked);
void resolv_unlink_resolution(struct resolv_requester *requester);
void resolv_trigger_resolution(struct resolv_requester *requester);
diff --git a/src/resolvers.c b/src/resolvers.c
index e2d4105..94cc101 100644
--- a/src/resolvers.c
+++ b/src/resolvers.c
@@ -1683,11 +1683,21 @@
return res;
}
+void resolv_purge_resolution_answer_records(struct resolv_resolution *resolution)
+{
+ struct resolv_answer_item *item, *itemback;
+
+ list_for_each_entry_safe(item, itemback, &resolution->response.answer_list, list) {
+ LIST_DEL(&item->list);
+ pool_free(resolv_answer_item_pool, item->ar_item);
+ pool_free(resolv_answer_item_pool, item);
+ }
+}
+
/* Releases a resolution from its requester(s) and move it back to the pool */
static void resolv_free_resolution(struct resolv_resolution *resolution)
{
struct resolv_requester *req, *reqback;
- struct resolv_answer_item *item, *itemback;
/* clean up configuration */
resolv_reset_resolution(resolution);
@@ -1698,16 +1708,7 @@
LIST_DEL(&req->list);
req->resolution = NULL;
}
-
- list_for_each_entry_safe(item, itemback, &resolution->response.answer_list, list) {
- LIST_DEL(&item->list);
- if (item->ar_item) {
- pool_free(resolv_answer_item_pool, item->ar_item);
- item->ar_item = NULL;
- }
- pool_free(resolv_answer_item_pool, item);
- }
-
+ resolv_purge_resolution_answer_records(resolution);
LIST_DEL(&resolution->list);
pool_free(resolv_resolution_pool, resolution);
}