diff --git a/lib/memory.c b/lib/memory.c index 562b0f589a..38e424da7d 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -112,3 +112,38 @@ qmem_walk (qmem_walk_fn *func, void *arg) } return 0; } + +struct exit_dump_args +{ + const char *prefix; + int error; +}; + +static int +qmem_exit_walker (void *arg, struct memgroup *mg, struct memtype *mt) +{ + struct exit_dump_args *eda = arg; + + if (!mt) + { + fprintf (stderr, "%s: showing active allocations in memory group %s\n", + eda->prefix, mg->name); + } + else if (mt->n_alloc) + { + char size[32]; + eda->error++; + snprintf (size, sizeof (size), "%10zu", mt->size); + fprintf (stderr, "%s: %-30s: %6zu * %s\n", + eda->prefix, mt->name, mt->n_alloc, + mt->size == SIZE_VAR ? "(variably sized)" : size); + } + return 0; +} + +void +log_memstats_stderr (const char *prefix) +{ + struct exit_dump_args eda = { .prefix = prefix, .error = 0 }; + qmem_walk (qmem_exit_walker, &eda); +} diff --git a/lib/memory.h b/lib/memory.h index 2680253d98..8f7d85a983 100644 --- a/lib/memory.h +++ b/lib/memory.h @@ -172,6 +172,7 @@ static inline size_t mtype_stats_alloc(struct memtype *mt) * last value from qmem_walk_fn. */ typedef int qmem_walk_fn (void *arg, struct memgroup *mg, struct memtype *mt); extern int qmem_walk (qmem_walk_fn *func, void *arg); +extern void log_memstats_stderr (const char *); extern void memory_oom (size_t size, const char *name); diff --git a/lib/memory_vty.c b/lib/memory_vty.c index fa9f50a23a..e4cb295cf0 100644 --- a/lib/memory_vty.c +++ b/lib/memory_vty.c @@ -35,80 +35,6 @@ #include "vty.h" #include "command.h" -void -log_memstats_stderr (const char *prefix) -{ -#if 0 - struct mlist *ml; - struct memory_list *m; - int i; - int j = 0; - - for (ml = mlists; ml->list; ml++) - { - i = 0; - - for (m = ml->list; m->index >= 0; m++) - if (m->index && mstat[m->index].alloc) - { - if (!i) - fprintf (stderr, - "%s: memstats: Current memory utilization in module %s:\n", - prefix, - ml->name); - fprintf (stderr, - "%s: memstats: %-30s: %10ld%s\n", - prefix, - m->format, - mstat[m->index].alloc, - mstat[m->index].alloc < 0 ? " (REPORT THIS BUG!)" : ""); - i = j = 1; - } - } - - if (j) - fprintf (stderr, - "%s: memstats: NOTE: If configuration exists, utilization may be " - "expected.\n", - prefix); - else - fprintf (stderr, - "%s: memstats: No remaining tracked memory utilization.\n", - prefix); -#endif -} - -#if 0 -static void -show_separator(struct vty *vty) -{ - vty_out (vty, "-----------------------------\r\n"); -} - -static int -show_memory_vty (struct vty *vty, struct memory_list *list) -{ - struct memory_list *m; - int needsep = 0; - - for (m = list; m->index >= 0; m++) - if (m->index == 0) - { - if (needsep) - { - show_separator (vty); - needsep = 0; - } - } - else if (mstat[m->index].alloc) - { - vty_out (vty, "%-30s: %10ld\r\n", m->format, mstat[m->index].alloc); - needsep = 1; - } - return needsep; -} -#endif - #ifdef HAVE_MALLINFO static int show_memory_mallinfo (struct vty *vty) @@ -174,23 +100,10 @@ DEFUN (show_memory, "Show running system information\n" "Memory statistics\n") { - int needsep = 0; - #ifdef HAVE_MALLINFO - needsep = show_memory_mallinfo (vty); + show_memory_mallinfo (vty); #endif /* HAVE_MALLINFO */ - (void) needsep; -#if 0 - struct mlist *ml; - for (ml = mlists; ml->list; ml++) - { - if (needsep) - show_separator (vty); - needsep = show_memory_vty (vty, ml->list); - } -#endif - qmem_walk(qmem_walker, vty); return CMD_SUCCESS; } diff --git a/lib/memory_vty.h b/lib/memory_vty.h index 7aab01ee5b..565a75aa98 100644 --- a/lib/memory_vty.h +++ b/lib/memory_vty.h @@ -24,7 +24,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "memory.h" extern void memory_init (void); -extern void log_memstats_stderr (const char *); /* Human friendly string for given byte count */ #define MTYPE_MEMSTR_LEN 20