On Thu, Mar 10, 2016 at 10:31:17PM -0800, Michael McConville wrote:
> 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.
>
> Thanks for this - I've been meaning to study the pool logic more.
>
> One minor thing I noticed:
>
> > 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
> > @@ -93,13 +93,13 @@
> > #define MQUERY(a, sz) mquery((a), (size_t)(sz), PROT_READ |
> > PROT_WRITE, \
> > MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, (off_t)0)
> >
> > -#define _MALLOC_LEAVE() if (__isthreaded) do { \
> > - malloc_active--; \
> > +#define _MALLOC_LEAVE(d) if (__isthreaded) do { \
> > + (d)->active--; \
> > _MALLOC_UNLOCK(); \
> > } while (0)
> > -#define _MALLOC_ENTER() if (__isthreaded) do { \
> > +#define _MALLOC_ENTER(d) if (__isthreaded) do { \
> > _MALLOC_LOCK(); \
> > - malloc_active++; \
> > + (d)->active++; \
> > } while (0)
>
> Are you sure these are guarded properly? I think the do-while block
> should wrap the entire thing, including the if condition. Otherwise,
> else conditions can still associate with the if.
You're right, but let's keep thsi a separate commit, ok?
-Otto