You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by rp...@apache.org on 2009/03/28 18:41:34 UTC
svn commit: r759519 - /apr/apr/trunk/memory/unix/apr_pools.c
Author: rpluem
Date: Sat Mar 28 17:41:33 2009
New Revision: 759519
URL: http://svn.apache.org/viewvc?rev=759519&view=rev
Log:
* The previous pool implementation used a less fine grained locking
mechanism. If it was not provided with a separate allocator
it used the parent allocator for locking.
Use the still present allocator argument to apr_pool_create_ex to
determine the correct level of granularity: If no allocator is passed
in use the mutex from the parent instead of creating a new one by
our self.
Modified:
apr/apr/trunk/memory/unix/apr_pools.c
Modified: apr/apr/trunk/memory/unix/apr_pools.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/memory/unix/apr_pools.c?rev=759519&r1=759518&r2=759519&view=diff
==============================================================================
--- apr/apr/trunk/memory/unix/apr_pools.c (original)
+++ apr/apr/trunk/memory/unix/apr_pools.c Sat Mar 28 17:41:33 2009
@@ -812,7 +812,6 @@
pool = malloc(sizeof(apr_pool_t));
pool->abort_fn = abort_fn;
pool->child = NULL;
- pool->cleanups = NULL;
pool->free_cleanups = NULL;
pool->pre_cleanups = NULL;
pool->free_pre_cleanups = NULL;
@@ -820,12 +819,21 @@
pool->user_data = NULL;
pool->tag = NULL;
- pool->blocks = &pool->final_block;
- pool->blocks->offset = 0;
- pool->blocks->next = NULL;
- (void)apr_thread_mutex_create(&pool->mutex,
- APR_THREAD_MUTEX_NESTED, pool);
- pool->final_cleanups = pool->cleanups;
+ if (allocator) {
+ pool->blocks = &pool->final_block;
+ pool->blocks->offset = 0;
+ pool->blocks->next = NULL;
+ pool->cleanups = NULL;
+ (void)apr_thread_mutex_create(&pool->mutex,
+ APR_THREAD_MUTEX_NESTED, pool);
+ pool->final_cleanups = pool->cleanups;
+ }
+ else {
+ pool->final_cleanups = NULL;
+ pool->final_block.offset = 0;
+ pool->final_block.next = NULL;
+ pool->mutex = parent->mutex;
+ }
pool->blocks = &pool->first_block;
pool->blocks->offset = 0;
pool->blocks->next = NULL;