On Fri, Sep 08, 2023 at 10:08:28AM +0900, Masato Asou wrote:
> From: Masato Asou <[email protected]>
> Date: Fri, 08 Sep 2023 05:45:55 +0900 (JST)
>
> > There was a mistake in the diff.
> >
> > From: Masato Asou <[email protected]>
> > 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
> >>
> >> $ 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++];