On Fri, Mar 11, 2016 at 01:43:09PM +0100, Martin Pieuchot wrote:

> On 09/03/16(Wed) 10:06, Otto Moerbeek wrote:
> > a future goal for malloc is to use multiple pools in threaded environments,
> > to reduce lock contention. 
> > 
> > This is a small first step towards that goal: move two globals to the
> > pool-specific struct dir_info. Currently there's only a single pool,
> > but that will change one day.
> > 
> > Lightly tested by myself on amd64, you can help by reviewing and
> > testing this.
> 
> Looks good, I have one question, see below.
> 
> > Index: malloc.c
> > ===================================================================
> > RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
> > retrieving revision 1.182
> > diff -u -p -r1.182 malloc.c
> > --- malloc.c        25 Feb 2016 00:38:51 -0000      1.182
> > +++ malloc.c        9 Mar 2016 08:31:52 -0000
> > @@ -243,7 +243,7 @@ hash(void *p)
> >  }
> >  
> >  static void
> > -wrterror(char *msg, void *p)
> > +wrterror(struct dir_info *d, char *msg, void *p)
> >  {
> >     char            *q = " error: ";
> >     struct iovec    iov[7];
> > @@ -256,8 +256,13 @@ wrterror(char *msg, void *p)
> >     iov[1].iov_base = pidbuf;
> >     snprintf(pidbuf, sizeof(pidbuf), "(%d) in ", getpid());
> >     iov[1].iov_len = strlen(pidbuf);
> > -   iov[2].iov_base = malloc_func;
> > -   iov[2].iov_len = strlen(malloc_func);
> > +   if (d != NULL) {
> > +           iov[2].iov_base = d->func;
> > +           iov[2].iov_len = strlen(d->func);
> > +   } else {
> > +           iov[2].iov_base = "unknown";
> > +           iov[2].iov_len = 7;
> > +   }
> 
> When can ``d'' be NULL?  Isn't this a programming error?

Look at malldoc_init(), if it fails it calls wrterror() wih a NULL
argumnent. 

        -Otto

Reply via email to