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

Reply via email to