]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: resolvers: Use a function to remove answers attached to a resolution
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 10 Mar 2021 13:40:39 +0000 (14:40 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 12 Mar 2021 16:41:28 +0000 (17:41 +0100)
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.

include/haproxy/resolvers.h
src/resolvers.c

index 7dc8819cabdb731381b9729ed995ffdaeaf1b3ce..34bc0fbf474572631b9b8dc56580abfa85459f4a 100644 (file)
@@ -43,6 +43,7 @@ int resolv_get_ip_from_response(struct resolv_response *r_res,
                              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);
index e2d4105459a9738c492efd0e151ed07a1e0bda1d..94cc101dfac645202f4a4196b472973f208f2589 100644 (file)
@@ -1683,11 +1683,21 @@ static struct resolv_resolution *resolv_pick_resolution(struct resolvers *resolv
        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 @@ static void resolv_free_resolution(struct resolv_resolution *resolution)
                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);
 }