Acked-by: Donald Sharp <[email protected]>

On Wed, Feb 24, 2016 at 12:26 AM, David Lamparter <
[email protected]> wrote:

> This adapts the dump-at-exit handler and removes the old leftover code.
>
> (Note the text in log_memtype_stderr was actually incorrect as the only
> caller in bgpd cleans up configuration before calling it, i.e. any
> remaining allocations are missing-cleanup bugs.)
>
> Signed-off-by: David Lamparter <[email protected]>
> ---
>  lib/memory.c     | 32 ++++++++++++++++++++
>  lib/memory.h     |  1 +
>  lib/memory_vty.c | 89
> +-------------------------------------------------------
>  lib/memory_vty.h |  1 -
>  4 files changed, 34 insertions(+), 89 deletions(-)
>
> diff --git a/lib/memory.c b/lib/memory.c
> index 80914b8..8247b7b 100644
> --- a/lib/memory.c
> +++ b/lib/memory.c
> @@ -103,3 +103,35 @@ int 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 8e9608a..cf184d4 100644
> --- a/lib/memory.h
> +++ b/lib/memory.h
> @@ -198,6 +198,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 e1c08ce..0b702ed 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 d2410d7..27aa8d4 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
> --
> 2.3.6
>
>
> _______________________________________________
> Quagga-dev mailing list
> [email protected]
> https://lists.quagga.net/mailman/listinfo/quagga-dev
>
_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to