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