summaryrefslogtreecommitdiff
path: root/src/cache.c
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2021-07-01 13:22:10 +0100
committerSimon Kelley <simon@thekelleys.org.uk>2021-07-01 13:22:10 +0100
commit4205e2ebcf45c3009fa171809193b83a62a593c2 (patch)
tree4ccc2b04332ecbb96e63abfa40a849814450bf6d /src/cache.c
parent9d806c51c25a23d64df607c8d7a88089745f963a (diff)
downloaddnsmasq-4205e2ebcf45c3009fa171809193b83a62a593c2.tar.gz
Reuse workspace bit in struct server ->flags.
Diffstat (limited to 'src/cache.c')
-rw-r--r--src/cache.c27
1 files changed, 18 insertions, 9 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 ;