httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Bligh <a...@alex.org.uk>
Subject Re: thread safety and mpm-prefork
Date Tue, 11 Jun 2013 22:18:56 GMT

On 11 Jun 2013, at 23:06, Sorin Manolache wrote:

> I'm sorry, I ran out of ideas. I suppose that the operations of the two threads on the
bucket brigade are protected by mutexes...

Yep. I create my own output bucket brigade too. I *presume* this uses the allocator mutex
to manipulate the bucket brigade (or that it contains its own mutex) protecting its link->next
pointers.

    /* We cannot use the same bucket allocator for the ouput bucket brigade
     * obb as the one associated with the connection (r->connection->bucket_alloc)
     * because the same bucket allocator cannot be used in two different
     * threads, and we use the connection bucket allocator in this
     * thread - see docs on apr_bucket_alloc_create(). This results in
     * occasional core dumps. So create our own bucket allocator and pool
     * for output thread bucket brigade.
     */

...

    if (
        ( apr_thread_mutex_create(&oallocatormutex, APR_THREAD_MUTEX_UNNESTED, r->pool)
== APR_SUCCESS) &&
        ( apr_allocator_create(&oallocator) == APR_SUCCESS) &&
        ( apr_allocator_mutex_set(oallocator, oallocatormutex), 1 ) &&
	( apr_pool_create_ex(&opool, NULL, NULL, oallocator) == APR_SUCCESS) && /* WARNING:
pool has no parent */
	( NULL != (obucketallocator = apr_bucket_alloc_create(opool))) &&
        ( NULL != (obb = apr_brigade_create(opool, obucketallocator)))
        ) {

-- 
Alex Bligh





Mime
View raw message