From 312e9f812a6b2f5ca2c2db866ffed3a0b289b945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= Date: Wed, 10 May 2023 12:57:17 +0200 Subject: [PATCH] fixup! Correct releasing of serv_domain --- src/dnsmasq.h | 2 +- src/network.c | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/dnsmasq.h b/src/dnsmasq.h index e8a1320..711ffd3 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -1331,7 +1331,7 @@ int label_exception(int index, int family, struct all_addr *addr); int fix_fd(int fd); int tcp_interface(int fd, int af); struct server_domain *server_domain_find_domain(const char *domain); -struct server_domain *server_domain_new(struct server *serv); +void server_domain_new(struct server *serv); #ifdef HAVE_IPV6 int set_ipv6pktinfo(int fd); #endif diff --git a/src/network.c b/src/network.c index b8d77fe..6faaad4 100644 --- a/src/network.c +++ b/src/network.c @@ -1544,6 +1544,7 @@ void add_update_server(int flags, serv->addr = *addr; if (source_addr) serv->source_addr = *source_addr; + server_domain_new(serv); } } @@ -1571,14 +1572,20 @@ struct server_domain *server_domain_find_domain(const char *domain) /**< Test structure has already set domain pointer. * * If not, create a new record. */ -struct server_domain *server_domain_new(struct server *serv) +void server_domain_new(struct server *serv) { struct server_domain *sd; + const char *domain = server_get_domain(serv); - if ((sd = whine_malloc(sizeof(struct server_domain)))) + sd = server_domain_find_domain(domain); + if (sd) { - const char *domain = server_get_domain(serv); + serv->serv_domain = sd; + return; + } + if ((sd = whine_malloc(sizeof(struct server_domain)))) + { /* Ensure all serv->domain values have own record in server_domain. * Add a new record. */ if (domain) @@ -1592,7 +1599,6 @@ struct server_domain *server_domain_new(struct server *serv) serv->serv_domain = sd; daemon->server_domains = sd; } - return sd; } /**< Test structure has already set domain pointer. @@ -1605,11 +1611,7 @@ static void server_domain_check(struct server *serv) if (sd) sd->flags &= (~SERV_MARK); /* found domain, mark active */ else - { - sd = server_domain_find_domain(serv->domain); - if (!sd) - server_domain_new(serv); - } + server_domain_new(serv); } void check_servers(void) -- 2.40.1