MEDIUM: resolvers: remove the last occurrences of the "safe" argument

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.
This commit is contained in:
Willy Tarreau 2021-10-20 14:07:31 +02:00
parent f766ec6b53
commit 6878f80427
4 changed files with 15 additions and 24 deletions

View 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);

View 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;
}

View 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);

View 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);