]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: resolvers: remove the last occurrences of the "safe" argument
authorWilly Tarreau <w@1wt.eu>
Wed, 20 Oct 2021 12:07:31 +0000 (14:07 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 20 Oct 2021 15:54:27 +0000 (17:54 +0200)
This one was used to indicate whether the callee had to follow particularly
safe code path when removing resolutions. Since the code now uses a kill
list, this is not needed anymore.

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

index 6030bb662fc53555de2a3a56f928d9a7edb15806..4058f9f5f5a9a0ce1ee3bfd5902259aec6dce667 100644 (file)
@@ -49,8 +49,8 @@ int resolv_get_ip_from_response(struct resolv_response *r_res,
                              struct server *owner);
 
 int resolv_link_resolution(void *requester, int requester_type, int requester_locked);
-void resolv_unlink_resolution(struct resolv_requester *requester, int safe);
-void resolv_detach_from_resolution_answer_items(struct resolv_resolution *res,  struct resolv_requester *req, int safe);
+void resolv_unlink_resolution(struct resolv_requester *requester);
+void resolv_detach_from_resolution_answer_items(struct resolv_resolution *res,  struct resolv_requester *req);
 void resolv_trigger_resolution(struct resolv_requester *requester);
 enum act_parse_ret resolv_parse_do_resolve(const char **args, int *orig_arg, struct proxy *px, struct act_rule *rule, char **err);
 int check_action_do_resolve(struct act_rule *rule, struct proxy *px, char **err);
index bd1defab42114ab34e22dd2439fdfd098fd7bbb9..e1f09193c6bfde6faa18b51ea2b637cd50093c69 100644 (file)
@@ -64,7 +64,7 @@ static unsigned int resolution_uuid = 1;
 unsigned int resolv_failed_resolutions = 0;
 static struct task *process_resolvers(struct task *t, void *context, unsigned int state);
 static void resolv_free_resolution(struct resolv_resolution *resolution);
-static void _resolv_unlink_resolution(struct resolv_requester *requester, int safe);
+static void _resolv_unlink_resolution(struct resolv_requester *requester);
 
 enum {
        DNS_STAT_ID,
@@ -606,7 +606,7 @@ static void free_aborted_resolutions()
  */
 static void resolv_srvrq_cleanup_srv(struct server *srv)
 {
-       _resolv_unlink_resolution(srv->resolv_requester, 0);
+       _resolv_unlink_resolution(srv->resolv_requester);
        HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
        srvrq_update_srv_status(srv, 1);
        ha_free(&srv->hostname);
@@ -803,7 +803,7 @@ srv_found:
                                        /* Unlink A/AAAA resolution for this server if there is an AR item.
                                         * It is usless to perform an extra resolution
                                         */
-                                       _resolv_unlink_resolution(srv->resolv_requester, 0);
+                                       _resolv_unlink_resolution(srv->resolv_requester);
                                }
 
                                if (!srv->hostname_dn) {
@@ -2014,7 +2014,7 @@ int resolv_link_resolution(void *requester, int requester_type, int requester_lo
  * is called using safe == 1 to make it usable into callbacks. Must be called
  * with the death_row already initialized via init_aborted_resolutions().
  */
-void resolv_detach_from_resolution_answer_items(struct resolv_resolution *res,  struct resolv_requester *req, int safe)
+void resolv_detach_from_resolution_answer_items(struct resolv_resolution *res,  struct resolv_requester *req)
 {
        struct resolv_answer_item *item, *itemback;
        struct server *srv, *srvback;
@@ -2040,7 +2040,7 @@ void resolv_detach_from_resolution_answer_items(struct resolv_resolution *res,
  * if <safe> is set to 1, the corresponding resolution is not released. Must be
  * called with the death_row already initialized via init_aborted_resolutions().
  */
-static void _resolv_unlink_resolution(struct resolv_requester *requester, int safe)
+static void _resolv_unlink_resolution(struct resolv_requester *requester)
 {
        struct resolv_resolution *res;
        struct resolv_requester  *req;
@@ -2051,7 +2051,7 @@ static void _resolv_unlink_resolution(struct resolv_requester *requester, int sa
        res = requester->resolution;
 
        /* remove ref from the resolution answer item list to the requester */
-       resolv_detach_from_resolution_answer_items(res,  requester, safe);
+       resolv_detach_from_resolution_answer_items(res,  requester);
 
        /* Clean up the requester */
        LIST_DEL_INIT(&requester->list);
@@ -2061,15 +2061,6 @@ static void _resolv_unlink_resolution(struct resolv_requester *requester, int sa
        if (!LIST_ISEMPTY(&res->requesters))
                req = LIST_NEXT(&res->requesters, struct resolv_requester *, list);
        else {
-               if (safe) {
-                       /* Don't release it yet. */
-                       resolv_reset_resolution(res);
-                       res->hostname_dn = NULL;
-                       res->hostname_dn_len = 0;
-                       resolv_purge_resolution_answer_records(res);
-                       return;
-               }
-
                abort_resolution(res);
                return;
        }
@@ -2096,10 +2087,10 @@ static void _resolv_unlink_resolution(struct resolv_requester *requester, int sa
 }
 
 /* The public version of the function above that deals with the death row. */
-void resolv_unlink_resolution(struct resolv_requester *requester, int safe)
+void resolv_unlink_resolution(struct resolv_requester *requester)
 {
        init_aborted_resolutions();
-       _resolv_unlink_resolution(requester, safe);
+       _resolv_unlink_resolution(requester);
        free_aborted_resolutions();
 }
 
@@ -2972,7 +2963,7 @@ enum act_return resolv_action_do_resolve(struct act_rule *rule, struct proxy *px
        ha_free(&s->resolv_ctx.hostname_dn);
        s->resolv_ctx.hostname_dn_len = 0;
        if (s->resolv_ctx.requester) {
-               _resolv_unlink_resolution(s->resolv_ctx.requester, 0);
+               _resolv_unlink_resolution(s->resolv_ctx.requester);
                pool_free(resolv_requester_pool, s->resolv_ctx.requester);
                s->resolv_ctx.requester = NULL;
        }
index 15c4d0536f84f2784b5323a6c96b590134a53550..f74bb5cb7f1e70503c278167f74904fb1190c7f8 100644 (file)
@@ -3574,7 +3574,7 @@ int srvrq_resolution_error_cb(struct resolv_requester *requester, int error_code
        }
 
        /* Remove any associated server ref */
-       resolv_detach_from_resolution_answer_items(res,  requester, 1);
+       resolv_detach_from_resolution_answer_items(res,  requester);
 
        return 0;
 }
@@ -3599,7 +3599,7 @@ int snr_resolution_error_cb(struct resolv_requester *requester, int error_code)
        if (!snr_update_srv_status(s, 1)) {
                memset(&s->addr, 0, sizeof(s->addr));
                HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
-               resolv_detach_from_resolution_answer_items(requester->resolution, requester, 1);
+               resolv_detach_from_resolution_answer_items(requester->resolution, requester);
                return 0;
        }
        HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
@@ -3722,7 +3722,7 @@ int srv_set_fqdn(struct server *srv, const char *hostname, int resolv_locked)
            strcasecmp(resolution->hostname_dn, hostname_dn) == 0)
                goto end;
 
-       resolv_unlink_resolution(srv->resolv_requester, 0);
+       resolv_unlink_resolution(srv->resolv_requester);
 
        free(srv->hostname);
        free(srv->hostname_dn);
index 524ae33e8a0ec3d1a0a80ad14d2427a649a2cd60..081c5bbb715ba72d986db0d7c61831f558f5196b 100644 (file)
@@ -680,7 +680,7 @@ static void stream_free(struct stream *s)
                HA_SPIN_LOCK(DNS_LOCK, &resolvers->lock);
                ha_free(&s->resolv_ctx.hostname_dn);
                s->resolv_ctx.hostname_dn_len = 0;
-               resolv_unlink_resolution(s->resolv_ctx.requester, 0);
+               resolv_unlink_resolution(s->resolv_ctx.requester);
                HA_SPIN_UNLOCK(DNS_LOCK, &resolvers->lock);
 
                pool_free(resolv_requester_pool, s->resolv_ctx.requester);