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++]; > >