You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by dg...@hyperreal.org on 1999/06/20 23:12:51 UTC
cvs commit: apache-2.0/mpm/src/main alloc.c http_config.c mpm_prefork.c
dgaudet 99/06/20 14:12:51
Modified: mpm/src CHANGES Configuration.mpm Configure
mpm/src/include ap_mpm.h
mpm/src/main alloc.c http_config.c mpm_prefork.c
Log:
crude ap_thread_mutex abstraction
Revision Changes Path
1.6 +3 -0 apache-2.0/mpm/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/CHANGES,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- CHANGES 1999/06/20 12:29:18 1.5
+++ CHANGES 1999/06/20 21:12:47 1.6
@@ -1,5 +1,8 @@
Changes with MPM
+ * Crude ap_thread_mutex abstraction so that we get the pthread stuff out
+ of alloc.c for now. [Dean Gaudet]
+
* Handle partial large writes correctly.
[Ben Laurie]
1.7 +1 -1 apache-2.0/mpm/src/Configuration.mpm
Index: Configuration.mpm
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/Configuration.mpm,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Configuration.mpm 1999/06/20 15:59:56 1.6
+++ Configuration.mpm 1999/06/20 21:12:47 1.7
@@ -1,4 +1,4 @@
-EXTRA_CFLAGS= -Wall #-pthread -D_THREAD_SAFE # Uncomment for FreeBSD
+EXTRA_CFLAGS= -Wall
EXTRA_LDFLAGS=
EXTRA_LIBS=
EXTRA_INCLUDES=
1.3 +1 -1 apache-2.0/mpm/src/Configure
Index: Configure
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/Configure,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Configure 1999/06/18 19:20:18 1.2
+++ Configure 1999/06/20 21:12:48 1.3
@@ -426,7 +426,7 @@
*-linux2)
DEF_WANTHSREGEX=yes
OS='Linux'
- CFLAGS="$CFLAGS -DLINUX=2 -pthread"
+ CFLAGS="$CFLAGS -DLINUX=2"
LIBS="$LIBS -lm"
;;
*-linux1)
1.2 +7 -0 apache-2.0/mpm/src/include/ap_mpm.h
Index: ap_mpm.h
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_mpm.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ap_mpm.h 1999/06/18 18:39:29 1.1
+++ ap_mpm.h 1999/06/20 21:12:49 1.2
@@ -66,6 +66,13 @@
used by the connection loop */
API_EXPORT(int) ap_mpm_graceful_stop(void);
+/* a mutex which synchronizes threads within one process */
+typedef struct ap_thread_mutex ap_thread_mutex;
+API_EXPORT(ap_thread_mutex *) ap_thread_mutex_new(void);
+API_EXPORT(void) ap_thread_mutex_lock(ap_thread_mutex *);
+API_EXPORT(void) ap_thread_mutex_unlock(ap_thread_mutex *);
+API_EXPORT(void) ap_thread_mutex_destroy(ap_thread_mutex *);
+
#ifdef HAS_OTHER_CHILD
/*
* register an other_child -- a child which the main loop keeps track of
1.2 +19 -14 apache-2.0/mpm/src/main/alloc.c
Index: alloc.c
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/main/alloc.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- alloc.c 1999/06/18 18:39:29 1.1
+++ alloc.c 1999/06/20 21:12:49 1.2
@@ -64,9 +64,9 @@
#include "httpd.h"
#include "http_log.h"
+#include "ap_mpm.h"
#include <stdarg.h>
-#include <pthread.h>
#ifdef OS2
#define INCL_DOS
@@ -209,7 +209,7 @@
static union block_hdr *block_freelist = NULL;
-static pthread_mutex_t alloc_mutex = PTHREAD_MUTEX_INITIALIZER;
+static ap_thread_mutex *alloc_mutex;
#ifdef POOL_DEBUG
static char *known_stack_point;
static int stack_direction;
@@ -343,7 +343,7 @@
if (blok == NULL)
return; /* Sanity check --- freeing empty pool? */
- (void) pthread_mutex_lock(&alloc_mutex);
+ (void) ap_thread_mutex_lock(alloc_mutex);
old_free_list = block_freelist;
block_freelist = blok;
@@ -377,7 +377,7 @@
num_blocks_freed += num_blocks;
#endif
- (void) pthread_mutex_unlock(&alloc_mutex);
+ (void) ap_thread_mutex_unlock(alloc_mutex);
#endif
}
@@ -426,9 +426,9 @@
{
union block_hdr *blok;
- (void) pthread_mutex_lock(&alloc_mutex);
+ (void) ap_thread_mutex_lock(alloc_mutex);
blok = new_block(min_size);
- (void) pthread_mutex_unlock(&alloc_mutex);
+ (void) ap_thread_mutex_unlock(alloc_mutex);
return blok;
}
@@ -473,7 +473,7 @@
union block_hdr *blok;
root_pool *new_pool;
- (void) pthread_mutex_lock(&alloc_mutex);
+ (void) ap_thread_mutex_lock(alloc_mutex);
blok = new_block(ROOT_HDR_BYTES);
new_pool = (root_pool *) blok->h.first_avail;
@@ -487,7 +487,7 @@
new_pool->p.first = new_pool->p.last = blok;
new_pool->p.thread_root = new_pool;
- (void) pthread_mutex_unlock(&alloc_mutex);
+ (void) ap_thread_mutex_unlock(alloc_mutex);
return (pool *)new_pool;
}
@@ -573,6 +573,11 @@
return permanent_pool;
}
+void ap_child_init_alloc(void)
+{
+ alloc_mutex = ap_thread_mutex_new();
+}
+
API_EXPORT(void) ap_clear_pool(struct pool *a)
{
@@ -607,7 +612,7 @@
{
ap_clear_pool(a);
- (void) pthread_mutex_lock(&alloc_mutex);
+ (void) ap_thread_mutex_lock(alloc_mutex);
if (a->parent) {
if (a->parent->sub_pools == a)
a->parent->sub_pools = a->sub_next;
@@ -616,7 +621,7 @@
if (a->sub_next)
a->sub_next->sub_prev = a->sub_prev;
}
- (void) pthread_mutex_unlock(&alloc_mutex);
+ (void) ap_thread_mutex_unlock(alloc_mutex);
free_blocks(a->thread_root, a->first);
}
@@ -913,9 +918,9 @@
cur_len = strp - blok->h.first_avail;
/* must try another blok */
- (void) pthread_mutex_lock(&alloc_mutex);
+ (void) ap_thread_mutex_lock(alloc_mutex);
nblok = new_block(2 * cur_len);
- (void) pthread_mutex_unlock(&alloc_mutex);
+ (void) ap_thread_mutex_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 */
@@ -924,10 +929,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) pthread_mutex_lock(&alloc_mutex);
+ (void) ap_thread_mutex_lock(alloc_mutex);
blok->h.next = block_freelist;
block_freelist = blok;
- (void) pthread_mutex_unlock(&alloc_mutex);
+ (void) ap_thread_mutex_unlock(alloc_mutex);
}
ps->blok = nblok;
ps->got_a_new_block = 1;
1.2 +3 -0 apache-2.0/mpm/src/main/http_config.c
Index: http_config.c
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/main/http_config.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- http_config.c 1999/06/18 18:39:29 1.1
+++ http_config.c 1999/06/20 21:12:50 1.2
@@ -1503,6 +1503,9 @@
{
module *m;
+ /* TODO: uh this seems ugly, is there a better way? */
+ ap_child_init_alloc();
+
for (m = top_module; m; m = m->next)
if (m->child_init)
(*m->child_init) (pchild, s);
1.4 +28 -0 apache-2.0/mpm/src/main/mpm_prefork.c
Index: mpm_prefork.c
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/main/mpm_prefork.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- mpm_prefork.c 1999/06/20 11:19:47 1.3
+++ mpm_prefork.c 1999/06/20 21:12:50 1.4
@@ -96,6 +96,7 @@
#include "http_core.h" /* for get_remote_host */
#include "http_connection.h"
#include "scoreboard_prefork.h"
+#include "ap_mpm.h"
#ifdef USE_SHMGET_SCOREBOARD
#include <sys/types.h>
#include <sys/ipc.h>
@@ -3962,6 +3963,33 @@
ap_listeners = new;
return NULL;
}
+
+/* there are no threads in the prefork model, so the mutexes are
+ nops. */
+/* TODO: make these #defines to eliminate the function call */
+
+struct ap_thread_mutex {
+ int dummy;
+};
+
+API_EXPORT(ap_thread_mutex *) ap_thread_mutex_new(void)
+{
+ return malloc(sizeof(ap_thread_mutex));
+}
+
+API_EXPORT(void) ap_thread_mutex_lock(ap_thread_mutex *mtx)
+{
+}
+
+API_EXPORT(void) ap_thread_mutex_unlock(ap_thread_mutex *mtx)
+{
+}
+
+API_EXPORT(void) ap_thread_mutex_destroy(ap_thread_mutex *mtx)
+{
+ free(mtx);
+}
+
static const command_rec prefork_cmds[] = {
{ "User", set_user, NULL, RSRC_CONF, TAKE1,