Commit c2207688 authored by Simon Kelley's avatar Simon Kelley

Memory stats for DNSSEC.

parent 98c098bf
...@@ -19,6 +19,13 @@ ...@@ -19,6 +19,13 @@
#ifdef HAVE_DNSSEC #ifdef HAVE_DNSSEC
static struct blockdata *keyblock_free = NULL; 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) struct blockdata *blockdata_alloc(char *data, size_t len)
{ {
...@@ -32,10 +39,15 @@ 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; block = keyblock_free;
keyblock_free = block->next; keyblock_free = block->next;
blockdata_count++;
} }
else else if ((block = whine_malloc(sizeof(struct blockdata))))
block = whine_malloc(sizeof(struct blockdata)); {
blockdata_count++;
if (blockdata_hwm < blockdata_count)
blockdata_hwm = blockdata_count;
}
if (!block) if (!block)
{ {
/* failed to alloc, free partial chain */ /* failed to alloc, free partial chain */
...@@ -76,9 +88,11 @@ void blockdata_free(struct blockdata *blocks) ...@@ -76,9 +88,11 @@ void blockdata_free(struct blockdata *blocks)
if (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; tmp->next = keyblock_free;
keyblock_free = blocks; keyblock_free = blocks;
blockdata_count--;
} }
} }
......
...@@ -1184,6 +1184,9 @@ void dump_cache(time_t now) ...@@ -1184,6 +1184,9 @@ void dump_cache(time_t now)
#ifdef HAVE_AUTH #ifdef HAVE_AUTH
my_syslog(LOG_INFO, _("queries for authoritative zones %u"), daemon->auth_answer); my_syslog(LOG_INFO, _("queries for authoritative zones %u"), daemon->auth_answer);
#endif #endif
#ifdef HAVE_DNSSEC
blockdata_report();
#endif
/* sum counts from different records for same server */ /* sum counts from different records for same server */
for (serv = daemon->servers; serv; serv = serv->next) for (serv = daemon->servers; serv; serv = serv->next)
......
...@@ -990,6 +990,7 @@ struct crec *cache_enumerate(int init); ...@@ -990,6 +990,7 @@ struct crec *cache_enumerate(int init);
/* blockdata.c */ /* blockdata.c */
#ifdef HAVE_DNSSEC #ifdef HAVE_DNSSEC
void blockdata_report(void);
struct blockdata *blockdata_alloc(char *data, size_t len); struct blockdata *blockdata_alloc(char *data, size_t len);
size_t blockdata_walk(struct blockdata **key, unsigned char **p, size_t cnt); size_t blockdata_walk(struct blockdata **key, unsigned char **p, size_t cnt);
void blockdata_retrieve(struct blockdata *block, size_t len, void *data); void blockdata_retrieve(struct blockdata *block, size_t len, void *data);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment