From c2207688c0e6ca00966201921c1b374ab8937aaf Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 8 Jan 2014 18:04:20 +0000 Subject: [PATCH] Memory stats for DNSSEC. --- src/blockdata.c | 24 +++++++++++++++++++----- src/cache.c | 3 +++ src/dnsmasq.h | 1 + 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/blockdata.c b/src/blockdata.c index be697aa..ba2e406 100644 --- a/src/blockdata.c +++ b/src/blockdata.c @@ -19,6 +19,13 @@ #ifdef HAVE_DNSSEC static struct blockdata *keyblock_free = NULL; +static unsigned int blockdata_count = 0, blockdata_hwm = 0; + +void blockdata_report(void) +{ + my_syslog(LOG_INFO, _("DNSSEC memory in use %u, max %u"), + blockdata_count * KEYBLOCK_LEN, blockdata_hwm * KEYBLOCK_LEN); +} struct blockdata *blockdata_alloc(char *data, size_t len) { @@ -32,10 +39,15 @@ struct blockdata *blockdata_alloc(char *data, size_t len) { block = keyblock_free; keyblock_free = block->next; + blockdata_count++; } - else - block = whine_malloc(sizeof(struct blockdata)); - + else if ((block = whine_malloc(sizeof(struct blockdata)))) + { + blockdata_count++; + if (blockdata_hwm < blockdata_count) + blockdata_hwm = blockdata_count; + } + if (!block) { /* failed to alloc, free partial chain */ @@ -76,9 +88,11 @@ void blockdata_free(struct blockdata *blocks) if (blocks) { - for (tmp = blocks; tmp->next; tmp = tmp->next); + for (tmp = blocks; tmp->next; tmp = tmp->next) + blockdata_count--; tmp->next = keyblock_free; - keyblock_free = blocks; + keyblock_free = blocks; + blockdata_count--; } } diff --git a/src/cache.c b/src/cache.c index 42039ec..1ff783c 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1184,6 +1184,9 @@ void dump_cache(time_t now) #ifdef HAVE_AUTH my_syslog(LOG_INFO, _("queries for authoritative zones %u"), daemon->auth_answer); #endif +#ifdef HAVE_DNSSEC + blockdata_report(); +#endif /* sum counts from different records for same server */ for (serv = daemon->servers; serv; serv = serv->next) diff --git a/src/dnsmasq.h b/src/dnsmasq.h index c31ac64..6a087e4 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -990,6 +990,7 @@ struct crec *cache_enumerate(int init); /* blockdata.c */ #ifdef HAVE_DNSSEC +void blockdata_report(void); struct blockdata *blockdata_alloc(char *data, size_t len); size_t blockdata_walk(struct blockdata **key, unsigned char **p, size_t cnt); void blockdata_retrieve(struct blockdata *block, size_t len, void *data);