You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rb...@locus.apache.org on 2000/03/13 22:46:43 UTC
cvs commit: apache-2.0/src/lib/apr/lib apr_pools.c
rbb 00/03/13 13:46:43
Modified: src/lib/apr/lib apr_pools.c
Log:
If we don't have threads in APR, we can't create INTRAPROCESS locks.
This also keeps us from trying to use thread locks when we aren't using
threads. Should be a small performance improvement.
Revision Changes Path
1.34 +28 -1 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.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- apr_pools.c 2000/03/10 00:06:12 1.33
+++ apr_pools.c 2000/03/13 21:46:42 1.34
@@ -230,8 +230,10 @@
*/
static union block_hdr *block_freelist = NULL;
+#if APR_HAS_THREADS
static ap_lock_t *alloc_mutex;
static ap_lock_t *spawn_mutex;
+#endif
#ifdef POOL_DEBUG
static char *known_stack_point;
@@ -361,7 +363,9 @@
return; /* Sanity check --- freeing empty pool? */
}
+#if APR_HAS_THREADS
ap_lock(alloc_mutex);
+#endif
old_free_list = block_freelist;
block_freelist = blok;
@@ -409,7 +413,9 @@
num_blocks_freed += num_blocks;
#endif /* ALLOC_STATS */
+#if APR_HAS_THREADS
ap_unlock(alloc_mutex);
+#endif /* APR_HAS_THREADS */
#endif /* ALLOC_USE_MALLOC */
}
@@ -499,7 +505,9 @@
ap_block_alarms();
+#if APR_HAS_THREADS
ap_lock(alloc_mutex);
+#endif
blok = new_block(POOL_HDR_BYTES, apr_abort);
new_pool = (ap_pool_t *) blok->h.first_avail;
@@ -521,7 +529,9 @@
p->sub_pools = new_pool;
}
+#if APR_HAS_THREADS
ap_unlock(alloc_mutex);
+#endif
ap_unblock_alarms();
return new_pool;
@@ -565,6 +575,7 @@
known_stack_point = &s;
stack_var_init(&s);
#endif
+#if APR_HAS_THREADS
status1 = ap_create_lock(&alloc_mutex, APR_MUTEX, APR_INTRAPROCESS,
NULL, NULL);
status2 = ap_create_lock(&spawn_mutex, APR_MUTEX, APR_INTRAPROCESS,
@@ -572,6 +583,7 @@
if (status1 != APR_SUCCESS || status2 != APR_SUCCESS) {
return NULL;
}
+#endif
permanent_pool = ap_make_sub_pool(NULL, NULL);
#ifdef ALLOC_STATS
@@ -635,7 +647,9 @@
{
ap_block_alarms();
ap_clear_real_pool(a);
+#if APR_HAS_THREADS
ap_lock(alloc_mutex);
+#endif
if (a->parent) {
if (a->parent->sub_pools == a) {
@@ -648,8 +662,9 @@
a->sub_next->sub_prev = a->sub_prev;
}
}
+#if APR_HAS_THREADS
ap_unlock(alloc_mutex);
-
+#endif
free_blocks(a->first);
ap_unblock_alarms();
}
@@ -855,7 +870,9 @@
ap_block_alarms();
+#if APR_HAS_THREADS
ap_lock(alloc_mutex);
+#endif
blok = new_block(size, c->apr_abort);
a->last->h.next = blok;
@@ -864,7 +881,9 @@
blok->h.owning_pool = a;
#endif
+#if APR_HAS_THREADS
ap_unlock(alloc_mutex);
+#endif
ap_unblock_alarms();
@@ -1000,9 +1019,13 @@
cur_len = strp - blok->h.first_avail;
/* must try another blok */
+#if APR_HAS_THREADS
ap_lock(alloc_mutex);
+#endif
nblok = new_block(2 * cur_len, NULL);
+#if APR_HAS_THREADS
ap_unlock(alloc_mutex);
+#endif
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 */
@@ -1011,10 +1034,14 @@
/* 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);
+#if APR_HAS_THREADS
ap_lock(alloc_mutex);
+#endif
blok->h.next = block_freelist;
block_freelist = blok;
+#if APR_HAS_THREADS
ap_unlock(alloc_mutex);
+#endif
}
ps->blok = nblok;
ps->got_a_new_block = 1;