From 4205e2ebcf45c3009fa171809193b83a62a593c2 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 1 Jul 2021 13:22:10 +0100 Subject: [PATCH] Reuse workspace bit in struct server ->flags. --- src/cache.c | 27 ++++++++++++++++++--------- src/dnsmasq.h | 4 ++-- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/cache.c b/src/cache.c index a4acad6..6d98556 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1602,18 +1602,18 @@ int cache_make_stat(struct txt_record *t) case TXT_STAT_SERVERS: /* sum counts from different records for same server */ for (serv = daemon->servers; serv; serv = serv->next) - serv->flags &= ~SERV_COUNTED; + serv->flags &= ~SERV_MARK; for (serv = daemon->servers; serv; serv = serv->next) - if (!(serv->flags & SERV_COUNTED)) + if (!(serv->flags & SERV_MARK)) { char *new, *lenp; int port, newlen, bytes_avail, bytes_needed; unsigned int queries = 0, failed_queries = 0; for (serv1 = serv; serv1; serv1 = serv1->next) - if (!(serv1->flags & SERV_COUNTED) && sockaddr_isequal(&serv->addr, &serv1->addr)) + if (!(serv1->flags & SERV_MARK) && sockaddr_isequal(&serv->addr, &serv1->addr)) { - serv1->flags |= SERV_COUNTED; + serv1->flags |= SERV_MARK; queries += serv1->queries; failed_queries += serv1->failed_queries; } @@ -1641,6 +1641,11 @@ int cache_make_stat(struct txt_record *t) } t->txt = (unsigned char *)buff; t->len = p - buff; + + /* clear our workspace, these bits are assumed zero elsewhere. */ + for (serv = daemon->servers; serv; serv = serv->next) + serv->flags &= ~SERV_MARK; + return 1; } @@ -1683,24 +1688,28 @@ void dump_cache(time_t now) /* sum counts from different records for same server */ for (serv = daemon->servers; serv; serv = serv->next) - serv->flags &= ~SERV_COUNTED; + serv->flags &= ~SERV_MARK; for (serv = daemon->servers; serv; serv = serv->next) - if (!(serv->flags & SERV_COUNTED)) + if (!(serv->flags & SERV_MARK)) { int port; unsigned int queries = 0, failed_queries = 0; for (serv1 = serv; serv1; serv1 = serv1->next) - if (!(serv1->flags & SERV_COUNTED) && sockaddr_isequal(&serv->addr, &serv1->addr)) + if (!(serv1->flags & SERV_MARK) && sockaddr_isequal(&serv->addr, &serv1->addr)) { - serv1->flags |= SERV_COUNTED; + serv1->flags |= SERV_MARK; queries += serv1->queries; failed_queries += serv1->failed_queries; } port = prettyprint_addr(&serv->addr, daemon->addrbuff); my_syslog(LOG_INFO, _("server %s#%d: queries sent %u, retried or failed %u"), daemon->addrbuff, port, queries, failed_queries); } - + + /* other code assumes these are left as zeros. */ + for (serv = daemon->servers; serv; serv = serv->next) + serv->flags &= ~SERV_MARK; + if (option_bool(OPT_DEBUG) || option_bool(OPT_LOG)) { struct crec *cache ; diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 939e41e..61be3df 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -536,8 +536,8 @@ union mysockaddr { #define SERV_FOR_NODOTS 32 /* server for names with no domain part only */ #define SERV_WARNED_RECURSIVE 64 /* avoid warning spam */ #define SERV_FROM_DBUS 128 /* 1 if source is DBus */ -#define SERV_MARK 256 /* for mark-and-delete */ -#define SERV_COUNTED 512 /* workspace for log code */ +#define SERV_MARK 256 /* for mark-and-delete and log code */ +/* #define SERV_COUNTED 512 /* workspace for log code */ #define SERV_USE_RESOLV 1024 /* forward this domain in the normal way */ #define SERV_FROM_RESOLV 2048 /* 1 for servers from resolv, 0 for command line. */ #define SERV_FROM_FILE 4096 /* read from --servers-file */