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;