> From: Brad Nicholes [mailto:[EMAIL PROTECTED]
> Sent: Friday, July 18, 2003 10:23 PM

Hi,

> I think we just discovered what the real source of the problem is.  It
> appears that apr_pool_create_ex() is trying to extract the mutex from
> the wrong allocator when an allocator is specified.  When it tries to
> get the mutex it uses the parent allocator if one was not passed in.  If
> an allocator was passed in then it uses that one instead which is wrong.
>  The mutex from the allocator that was passed in does not protect the
> parent but the code still manipulates it anyway.  This means that two or
> more threads could overwrite parent->child simply because the wrong
> mutex was locked or no mutex was locked at all (in our case).  The call
> to apr_allocator_mutex_get() should use "parent->allocator" not
> "allocator".  If you look at apr_pool_destroy() it is doing it
> correctly.  Otherwise this code is not thread safe.

Spot on Brad!  I'll commit the fix ASAP.


Sander

Reply via email to