}
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);
+}
* 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);
#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)
"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;
}