]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
fixup wrap around for very large mem usage on printout.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 11 Nov 2008 13:47:25 +0000 (13:47 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 11 Nov 2008 13:47:25 +0000 (13:47 +0000)
git-svn-id: file:///svn/unbound/trunk@1343 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/remote.c
doc/Changelog

index d4b7ae7a52ef88f4777d3d9b3f0ce372ab11fb0e..59cca80135296e0fed7bf62893c413a01aa5b6ef 100644 (file)
@@ -598,6 +598,21 @@ print_thread_stats(SSL* ssl, int i, struct stats_info* s)
        return print_stats(ssl, nm, s);
 }
 
+/** print long number */
+static int
+print_longnum(SSL* ssl, char* desc, size_t x)
+{
+       if(x > 1024*1024*1024) {
+               /* more than a Gb */
+               size_t front = x / (size_t)1000000;
+               size_t back = x % (size_t)1000000;
+               return ssl_printf(ssl, "%s%u%6.6u\n", desc, 
+                       (unsigned)front, (unsigned)back);
+       } else {
+               return ssl_printf(ssl, "%s%u\n", desc, (unsigned)x);
+       }
+}
+
 /** print mem stats */
 static int
 print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon)
@@ -607,8 +622,8 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon)
 #ifdef HAVE_SBRK
        extern void* unbound_start_brk;
        void* cur = sbrk(0);
-       if(!ssl_printf(ssl, "mem.total.sbrk"SQ"%u\n"
-               (unsigned)(cur-unbound_start_brk))) return 0;
+       if(!print_longnum(ssl, "mem.total.sbrk"SQ
+               (size_t)(cur - unbound_start_brk))) return 0;
 #endif /* HAVE_SBRK */
        msg = slabhash_get_mem(daemon->env->msg_cache);
        rrset = slabhash_get_mem(&daemon->env->rrset_cache->table);
@@ -629,13 +644,13 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon)
                        (&worker->env, m);
        }
 
-       if(!ssl_printf(ssl, "mem.cache.rrset"SQ"%u\n", (unsigned)rrset))
+       if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset))
                return 0;
-       if(!ssl_printf(ssl, "mem.cache.message"SQ"%u\n", (unsigned)msg))
+       if(!print_longnum(ssl, "mem.cache.message"SQ, msg))
                return 0;
-       if(!ssl_printf(ssl, "mem.mod.iterator"SQ"%u\n", (unsigned)iter))
+       if(!print_longnum(ssl, "mem.mod.iterator"SQ, iter))
                return 0;
-       if(!ssl_printf(ssl, "mem.mod.validator"SQ"%u\n", (unsigned)val))
+       if(!print_longnum(ssl, "mem.mod.validator"SQ, val))
                return 0;
        return 1;
 }
index a74175996248b9c11f63c9734fa5e8c2a5e4a41f..44dc7e8aae5ae66e88c2cd3c1ed51bf44fbb789d 100644 (file)
@@ -4,6 +4,8 @@
          in the negative cache rbtree (upcoming 1.1 feature). (Thanks to 
          Attila Nagy for testing).
        - nicer comments in cachedump about failed RR to string conversion.
+       - fix 32bit wrap around when printing large (4G and more) mem usage
+         for extended statistics.
 
 10 November 2008: Wouter
        - fixup the getaddrinfo compat code rename.