stoddard 99/10/11 08:28:03
Modified: src/lib/apr/lib apr_pools.c Log: Migrate pool locking to use apr locks. Revision Changes Path 1.15 +25 -18 apache-2.0/src/lib/apr/lib/apr_pools.c Index: apr_pools.c =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/apr/lib/apr_pools.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- apr_pools.c 1999/10/11 14:20:41 1.14 +++ apr_pools.c 1999/10/11 15:28:02 1.15 @@ -71,6 +71,7 @@ #include "apr_general.h" #include "apr_pools.h" #include "apr_lib.h" +#include "apr_lock.h" #include "misc.h" #ifdef HAVE_SYS_STAT_H #include <sys/stat.h> @@ -204,9 +205,10 @@ * Static cells for managing our internal synchronisation. */ static union block_hdr *block_freelist = NULL; -static ap_mutex_t *alloc_mutex = NULL; -static ap_mutex_t *spawn_mutex = NULL; +static ap_lock_t *alloc_mutex; +static ap_lock_t *spawn_mutex; + #ifdef POOL_DEBUG static char *known_stack_point; static int stack_direction; @@ -337,7 +339,7 @@ return; /* Sanity check --- freeing empty pool? */ } - (void) ap_acquire_mutex(alloc_mutex); + ap_lock(alloc_mutex); old_free_list = block_freelist; block_freelist = blok; @@ -385,7 +387,7 @@ num_blocks_freed += num_blocks; #endif /* ALLOC_STATS */ - (void) ap_release_mutex(alloc_mutex); + ap_unlock(alloc_mutex); #endif /* ALLOC_USE_MALLOC */ } @@ -475,7 +477,7 @@ ap_block_alarms(); - (void) ap_acquire_mutex(alloc_mutex); + ap_lock(alloc_mutex); blok = new_block(POOL_HDR_BYTES); new_pool = (ap_pool_t *) blok->h.first_avail; @@ -497,7 +499,7 @@ p->sub_pools = new_pool; } - (void) ap_release_mutex(alloc_mutex); + ap_unlock(alloc_mutex); ap_unblock_alarms(); return new_pool; @@ -540,8 +542,13 @@ known_stack_point = &s; stack_var_init(&s); #endif - alloc_mutex = ap_create_mutex(NULL); - spawn_mutex = ap_create_mutex(NULL); + ap_create_lock(NULL, APR_MUTEX, APR_INTRAPROCESS, + NULL, + &alloc_mutex); + ap_create_lock(NULL, APR_MUTEX, APR_INTRAPROCESS, + NULL, + &spawn_mutex); + permanent_pool = ap_make_sub_pool(NULL); #ifdef ALLOC_STATS atexit(dump_stats); @@ -556,11 +563,11 @@ { ap_block_alarms(); - (void) ap_acquire_mutex(alloc_mutex); + ap_lock(alloc_mutex); while (a->sub_pools) { ap_destroy_real_pool(a->sub_pools); } - (void) ap_release_mutex(alloc_mutex); + ap_unlock(alloc_mutex); /* * Don't hold the mutex during cleanups. */ @@ -600,8 +607,8 @@ { ap_block_alarms(); ap_clear_real_pool(a); + ap_lock(alloc_mutex); - (void) ap_acquire_mutex(alloc_mutex); if (a->parent) { if (a->parent->sub_pools == a) { a->parent->sub_pools = a->sub_next; @@ -613,7 +620,7 @@ a->sub_next->sub_prev = a->sub_prev; } } - (void) ap_release_mutex(alloc_mutex); + ap_unlock(alloc_mutex); free_blocks(a->first); ap_unblock_alarms(); @@ -821,7 +828,7 @@ ap_block_alarms(); - (void) ap_acquire_mutex(alloc_mutex); + ap_lock(alloc_mutex); blok = new_block(size); a->last->h.next = blok; @@ -830,7 +837,7 @@ blok->h.owning_pool = a; #endif - (void) ap_release_mutex(alloc_mutex); + ap_unlock(alloc_mutex); ap_unblock_alarms(); @@ -966,9 +973,9 @@ cur_len = strp - blok->h.first_avail; /* must try another blok */ - (void) ap_acquire_mutex(alloc_mutex); + ap_lock(alloc_mutex); nblok = new_block(2 * cur_len); - (void) ap_release_mutex(alloc_mutex); + ap_unlock(alloc_mutex); memcpy(nblok->h.first_avail, blok->h.first_avail, cur_len); ps->vbuff.curpos = nblok->h.first_avail + cur_len; /* save a byte for the NUL terminator */ @@ -977,10 +984,10 @@ /* did we allocate the current blok? if so free it up */ if (ps->got_a_new_block) { debug_fill(blok->h.first_avail, blok->h.endp - blok->h.first_avail); - (void) ap_acquire_mutex(alloc_mutex); + ap_lock(alloc_mutex); blok->h.next = block_freelist; block_freelist = blok; - (void) ap_release_mutex(alloc_mutex); + ap_unlock(alloc_mutex); } ps->blok = nblok; ps->got_a_new_block = 1;