]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
Memory stats for DNSSEC.
authorSimon Kelley <simon@thekelleys.org.uk>
Wed, 8 Jan 2014 18:04:20 +0000 (18:04 +0000)
committerSimon Kelley <simon@thekelleys.org.uk>
Wed, 8 Jan 2014 18:04:20 +0000 (18:04 +0000)
src/blockdata.c
src/cache.c
src/dnsmasq.h

index be697aaf3bb42262bdd6c88b7f69be588e2e9648..ba2e4069d85ca838caf764290ad9abe171f9b668 100644 (file)
 #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--;
     }
 }
 
index 42039ec8b2b61a3a976ba18a0584dccfb11ee834..1ff783c8c43b7ced7c5b7ac242f055de47a6ca9b 100644 (file)
@@ -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)
index c31ac644b57b72fdd7994800c9241f63d116d228..6a087e490d5a69973ee6d49a2dd41448f692a198 100644 (file)
@@ -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);