From 21a64ef24706f4eca17629cb4e1995af92ddb74f Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 11 Nov 2008 13:47:25 +0000 Subject: [PATCH] fixup wrap around for very large mem usage on printout. git-svn-id: file:///svn/unbound/trunk@1343 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/remote.c | 27 +++++++++++++++++++++------ doc/Changelog | 2 ++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index d4b7ae7a5..59cca8013 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -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; } diff --git a/doc/Changelog b/doc/Changelog index a74175996..44dc7e8aa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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.