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);
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,
*/
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);
/* 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) {
* 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;
* 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;
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);
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;
}
}
/* 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();
}
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;
}
}
/* Remove any associated server ref */
- resolv_detach_from_resolution_answer_items(res, requester, 1);
+ resolv_detach_from_resolution_answer_items(res, requester);
return 0;
}
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);
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);