*/
static void resolv_srvrq_cleanup_srv(struct server *srv)
{
+ struct server_inetaddr srv_addr;
+
_resolv_unlink_resolution(srv->resolv_requester);
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
srvrq_set_srv_down(srv);
ha_free(&srv->hostname);
ha_free(&srv->hostname_dn);
srv->hostname_dn_len = 0;
- memset(&srv->addr, 0, sizeof(srv->addr));
- srv->svc_port = 0;
+ memset(&srv_addr, 0, sizeof(srv_addr));
+ /* unset server's addr */
+ server_set_inetaddr(srv, &srv_addr, SERVER_INETADDR_UPDATER_NONE, NULL);
srv->flags |= SRV_F_NO_RESOLUTION;
ebpt_delete(&srv->host_dn);
srv_update_addr(s, firstip, firstip_sin_family, SERVER_INETADDR_UPDATER_DNS_CACHE);
update_status:
- if (!snr_set_srv_down(s, has_no_ip) && has_no_ip)
- memset(&s->addr, 0, sizeof(s->addr));
+ if (!snr_set_srv_down(s, has_no_ip) && has_no_ip) {
+ struct server_inetaddr s_addr;
+
+ memset(&s_addr, 0, sizeof(s_addr));
+ /* unset server's addr */
+ server_set_inetaddr(s, &s_addr, SERVER_INETADDR_UPDATER_NONE, NULL);
+ }
return 1;
invalid:
counters->app.resolver.invalid++;
goto update_status;
}
- if (!snr_set_srv_down(s, has_no_ip) && has_no_ip)
- memset(&s->addr, 0, sizeof(s->addr));
+ if (!snr_set_srv_down(s, has_no_ip) && has_no_ip) {
+ struct server_inetaddr s_addr;
+
+ memset(&s_addr, 0, sizeof(s_addr));
+ /* unset server's addr */
+ server_set_inetaddr(s, &s_addr, SERVER_INETADDR_UPDATER_NONE, NULL);
+ }
return 0;
}
HA_SPIN_LOCK(SERVER_LOCK, &s->lock);
if (!snr_set_srv_down(s, 1)) {
- memset(&s->addr, 0, sizeof(s->addr));
+ struct server_inetaddr s_addr;
+
+ memset(&s_addr, 0, sizeof(s_addr));
+ /* unset server's addr */
+ server_set_inetaddr(s, &s_addr, SERVER_INETADDR_UPDATER_NONE, NULL);
HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
resolv_detach_from_resolution_answer_items(requester->resolution, requester);
return 0;