When a server is set in RMAINT becaues of a SRV resolution failure, the
server DNS resolution, if any, must be unlink first. It is mandatory to
handle the change in the context of a SRV resolution.
This patch must be backported as far as 2.2.
(cherry picked from commit
bca680ba90787fc57b9711e268f6fb0c74e7e49c)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
833937da99caf3639e67a14409095a402ea2f0b2)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
f586f823539583c5f637e239a90f6dc0a959b859)
[cf: Must be backported as far as 2.0 because of recent changes on resolvers]
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
if (srv->srvrq == srvrq && srv->svc_port == item->port &&
item->data_len == srv->hostname_dn_len &&
!dns_hostname_cmp(srv->hostname_dn, item->target, item->data_len)) {
+ dns_unlink_resolution(srv->dns_requester);
snr_update_srv_status(srv, 1);
free(srv->hostname);
free(srv->hostname_dn);
srv->hostname_dn_len = 0;
memset(&srv->addr, 0, sizeof(srv->addr));
srv->svc_port = 0;
- dns_unlink_resolution(srv->dns_requester);
}
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
for (s = srvrq->proxy->srv; s != NULL; s = s->next) {
HA_SPIN_LOCK(SERVER_LOCK, &s->lock);
if (s->srvrq == srvrq) {
+ dns_unlink_resolution(s->dns_requester);
snr_update_srv_status(s, 1);
free(s->hostname);
free(s->hostname_dn);
s->hostname_dn_len = 0;
memset(&s->addr, 0, sizeof(s->addr));
s->svc_port = 0;
- dns_unlink_resolution(s->dns_requester);
}
HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
}