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