[Dnsmasq-discuss] [PATCH v2] Optimize inserting records into server list.
Simon Kelley
simon at thekelleys.org.uk
Mon Sep 20 19:25:46 UTC 2021
Applied, with a small addition.
cleanup_servers() may end up deleting the last server in the chain,
invalidating servers_tail, so recalculate it as part of the loop there.
Cheers,
Simon.
On 19/09/2021 11:56, hev wrote:
> Signed-off-by: hev <r at hev.cc>
> ---
> src/dnsmasq.h | 2 +-
> src/domain-match.c | 12 ++++--------
> 2 files changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/src/dnsmasq.h b/src/dnsmasq.h
> index 327ad65..639c568 100644
> --- a/src/dnsmasq.h
> +++ b/src/dnsmasq.h
> @@ -1105,7 +1105,7 @@ extern struct daemon {
> char *lease_change_command;
> struct iname *if_names, *if_addrs, *if_except, *dhcp_except, *auth_peers, *tftp_interfaces;
> struct bogus_addr *bogus_addr, *ignore_addr;
> - struct server *servers, *local_domains, **serverarray, *no_rebind;
> + struct server *servers, *servers_tail, *local_domains, **serverarray, *no_rebind;
> int server_has_wildcard;
> int serverarraysz, serverarrayhwm;
> struct ipsets *ipsets;
> diff --git a/src/domain-match.c b/src/domain-match.c
> index 8f29621..7483782 100644
> --- a/src/domain-match.c
> +++ b/src/domain-match.c
> @@ -673,18 +673,14 @@ int add_update_server(int flags,
> }
> else
> {
> - struct server *s;
> -
> memset(serv, 0, sizeof(struct server));
>
> /* Add to the end of the chain, for order */
> - if (!daemon->servers)
> - daemon->servers = serv;
> + if (daemon->servers_tail)
> + daemon->servers_tail->next = serv;
> else
> - {
> - for (s = daemon->servers; s->next; s = s->next);
> - s->next = serv;
> - }
> + daemon->servers = serv;
> + daemon->servers_tail = serv;
>
> #ifdef HAVE_LOOP
> serv->uid = rand32();
>
More information about the Dnsmasq-discuss
mailing list