On Sat, Sep 09, 2023 at 11:27:37AM +0900, Masato Asou wrote:

> From: Otto Moerbeek <o...@drijf.net>
> Date: Fri, 8 Sep 2023 13:39:53 +0200
> 
> > On Fri, Sep 08, 2023 at 10:08:28AM +0900, Masato Asou wrote:
> > 
> >> From: Masato Asou <a...@soum.co.jp>
> >> Date: Fri, 08 Sep 2023 05:45:55 +0900 (JST)
> >> 
> >> > There was a mistake in the diff.
> >> > 
> >> > From: Masato Asou <a...@soum.co.jp>
> >> > Date: Fri, 08 Sep 2023 05:33:23 +0900 (JST)
> >> > 
> >> >> Hi,
> >> >> 
> >> >> I have modified diff. comments, ok?
> > 
> > As wrtwarning() is only used #ifdef MALLOC_STATS, please put it inside
> > those guards (e.g directly above putleakinfo()). 
> > 
> >     -Otto
> 
> I have fixed diff. ok?

OK,

        -Otto

> --
> ASOU Masato
> 
> Index: stdlib/malloc.c
> ===================================================================
> RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
> retrieving revision 1.289
> diff -u -p -r1.289 malloc.c
> --- stdlib/malloc.c   30 Jun 2023 06:24:58 -0000      1.289
> +++ stdlib/malloc.c   9 Sep 2023 02:16:22 -0000
> @@ -2338,6 +2338,22 @@ RBT_PROTOTYPE(leaktree, leaknode, entry,
>  RBT_GENERATE(leaktree, leaknode, entry, leakcmp);
>  
>  static void
> +wrtwarning(const char *func, char *msg, ...)
> +{
> +     int             saved_errno = errno;
> +     va_list         ap;
> +
> +     dprintf(STDERR_FILENO, "%s(%d) in %s(): ", __progname,
> +         getpid(), func != NULL ? func : "unknown");
> +     va_start(ap, msg);
> +     vdprintf(STDERR_FILENO, msg, ap);
> +     va_end(ap);
> +     dprintf(STDERR_FILENO, "\n");
> +
> +     errno = saved_errno;
> +}
> +
> +static void
>  putleakinfo(struct leaktree *leaks, void *f, size_t sz, int cnt)
>  {
>       struct leaknode key, *p;
> @@ -2353,8 +2369,10 @@ putleakinfo(struct leaktree *leaks, void
>               if (page == NULL ||
>                   used >= MALLOC_PAGESIZE / sizeof(struct leaknode)) {
>                       page = MMAP(MALLOC_PAGESIZE, 0);
> -                     if (page == MAP_FAILED)
> +                     if (page == MAP_FAILED) {
> +                             wrtwarning(__func__, strerror(errno));
>                               return;
> +                     }
>                       used = 0;
>               }
>               p = &page[used++];
> 
> >> >> 
> >> >> $ MALLOC_OPTIONS=D ktrace -tu ./a.out 1073490000
> >> >> a.out(99781) in unknown(): putleakinfo(): Cannot allocate memory
> >> >> --
> >> >> ASOU Masato
> >> >> 
> >> >> Index: stdlib/malloc.c
> >> >> ===================================================================
> >> >> RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
> >> >> retrieving revision 1.289
> >> >> diff -u -p -r1.289 malloc.c
> >> >> --- stdlib/malloc.c     30 Jun 2023 06:24:58 -0000      1.289
> >> >> +++ stdlib/malloc.c     7 Sep 2023 20:30:01 -0000
> >> >> @@ -344,6 +344,22 @@ wrterror(struct dir_info *d, char *msg, 
> >> >>  }
> >> >>  
> >> >>  static void
> >> >> +wrtwarning(char *func, char *msg, ...)
> >> >> +{
> >> >> +       int             saved_errno = errno;
> >> >> +       va_list         ap;
> >> >> +
> >> >> +       dprintf(STDERR_FILENO, "%s(%d) in %s(): ", __progname,
> >> >> +           getpid(), func == NULL ? func : "unknown");
> >> > 
> >> > func != NULL ? func : "unknown"
> >> > 
> >> > I will take a break and re-create the diff.
> >> 
> >> I have fixed the diff.
> >> 
> >> $ MALLOC_OPTIONS=D ktrace -tu ./a.out 1073500000
> >> a.out(34886) in putleakinfo(): Cannot allocate memory
> >> $ kdump -u malloc                               
> >> ******** Start dump a.out *******
> >> M=8 I=1 F=0 U=0 J=1 R=0 X=0 C=0 cache=64 G=0
> >> Leak report:
> >>                  f     sum      #    avg
> >> 
> >> ******** End dump a.out *******
> >> $ ls -l ktrace.out 
> >> -rw-------  1 asou  asou  734 Sep  8 09:59 ktrace.out
> >> 
> >> comments, ok?
> >> --
> >> ASOU Masato
> >> 
> >> Index: stdlib/malloc.c
> >> ===================================================================
> >> RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
> >> retrieving revision 1.289
> >> diff -u -p -r1.289 malloc.c
> >> --- stdlib/malloc.c        30 Jun 2023 06:24:58 -0000      1.289
> >> +++ stdlib/malloc.c        8 Sep 2023 00:55:13 -0000
> >> @@ -344,6 +344,22 @@ wrterror(struct dir_info *d, char *msg, 
> >>  }
> >>  
> >>  static void
> >> +wrtwarning(const char *func, char *msg, ...)
> >> +{
> >> +  int             saved_errno = errno;
> >> +  va_list         ap;
> >> +
> >> +  dprintf(STDERR_FILENO, "%s(%d) in %s(): ", __progname,
> >> +      getpid(), func != NULL ? func : "unknown");
> >> +  va_start(ap, msg);
> >> +  vdprintf(STDERR_FILENO, msg, ap);
> >> +  va_end(ap);
> >> +  dprintf(STDERR_FILENO, "\n");
> >> +
> >> +  errno = saved_errno;
> >> +}
> >> +
> >> +static void
> >>  rbytes_init(struct dir_info *d)
> >>  {
> >>    arc4random_buf(d->rbytes, sizeof(d->rbytes));
> >> @@ -2353,8 +2369,10 @@ putleakinfo(struct leaktree *leaks, void
> >>            if (page == NULL ||
> >>                used >= MALLOC_PAGESIZE / sizeof(struct leaknode)) {
> >>                    page = MMAP(MALLOC_PAGESIZE, 0);
> >> -                  if (page == MAP_FAILED)
> >> +                  if (page == MAP_FAILED) {
> >> +                          wrtwarning(__func__, strerror(errno));
> >>                            return;
> >> +                  }
> >>                    used = 0;
> >>            }
> >>            p = &page[used++];
> > 

Reply via email to