bhyde 99/10/07 13:48:29
Modified: src/include ap_listen.h http_config.h
src/main http_config.c http_main.c listen.c
src/modules/mpm/dexter dexter.c
src/modules/mpm/mpmt_pthread mpmt_pthread.c
src/modules/mpm/prefork prefork.c
src/modules/mpm/spmt_os2 spmt_os2.c
src/modules/mpm/winnt winnt.c
Log:
Well this was thought provoking.
Drive out the use of malloc in two places.
In listen.c, using the global process pool instead. That changes the
API into listen so that a process is passed in rather than the config
pool. That's all was easy.
The pain is propogating a change into all N of the mpm, they
are all similar but different in their use of listen.c There
is a lot to dislike about similar but code scattered code.
I changed the N setup_listener routines, they now take only
the server since they can dig the config and global pool
out of there.
Free today: ap_setup_prelinked_modules now takes the process so it
can allocate it's table in the process's pool rathern than use
malloc.
Revision Changes Path
1.7 +1 -1 apache-2.0/src/include/ap_listen.h
Index: ap_listen.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/include/ap_listen.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ap_listen.h 1999/09/24 22:01:17 1.6
+++ ap_listen.h 1999/10/07 20:47:47 1.7
@@ -71,7 +71,7 @@
ap_listen_rec *ap_listeners;
void ap_listen_pre_config(void);
-int ap_listen_open(ap_context_t *pconf, unsigned port);
+int ap_listen_open(process_rec *process, unsigned port);
const char *ap_set_listenbacklog(cmd_parms *cmd, void *dummy, char *arg);
const char *ap_set_listener(cmd_parms *cmd, void *dummy, char *ips);
const char *ap_set_send_buffer_size(cmd_parms *cmd, void *dummy, char *arg);
1.6 +1 -1 apache-2.0/src/include/http_config.h
Index: http_config.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/include/http_config.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- http_config.h 1999/10/07 18:13:10 1.5
+++ http_config.h 1999/10/07 20:47:48 1.6
@@ -323,7 +323,7 @@
/* For http_main.c... */
-void ap_setup_prelinked_modules(void);
+void ap_setup_prelinked_modules(process_rec *process);
void ap_show_directives(void);
void ap_show_modules(void);
server_rec *ap_read_config(process_rec *process, ap_context_t *temp_pool,
const char *config_name);
1.13 +2 -2 apache-2.0/src/main/http_config.c
Index: http_config.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_config.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- http_config.c 1999/10/07 18:13:16 1.12
+++ http_config.c 1999/10/07 20:47:52 1.13
@@ -526,7 +526,7 @@
*m = NULL;
}
-void ap_setup_prelinked_modules()
+void ap_setup_prelinked_modules(process_rec *process)
{
module **m;
module **m2;
@@ -541,7 +541,7 @@
/*
* Initialise list of loaded modules
*/
- ap_loaded_modules = (module **)malloc(
+ ap_loaded_modules = (module **)ap_palloc(process->pool,
sizeof(module *)*(total_modules+DYNAMIC_MODULE_LIMIT+1));
if (ap_loaded_modules == NULL) {
fprintf(stderr, "Ouch! Out of memory in
ap_setup_prelinked_modules()!\n");
1.14 +2 -2 apache-2.0/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_main.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- http_main.c 1999/10/07 18:13:17 1.13
+++ http_main.c 1999/10/07 20:47:53 1.14
@@ -293,12 +293,12 @@
g_pHookPool=pglobal;
+ ap_setup_prelinked_modules(process);
+
ap_create_context(&pcommands, pglobal);
ap_server_pre_read_config = ap_make_array(pcommands, 1, sizeof(char *));
ap_server_post_read_config = ap_make_array(pcommands, 1, sizeof(char *));
ap_server_config_defines = ap_make_array(pcommands, 1, sizeof(char *));
-
- ap_setup_prelinked_modules();
while ((c = getopt(argc, argv, "C:c:d:f:vVlLth")) != -1) {
char **new;
1.11 +7 -6 apache-2.0/src/main/listen.c
Index: listen.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/listen.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- listen.c 1999/10/04 16:37:54 1.10
+++ listen.c 1999/10/07 20:47:54 1.11
@@ -151,7 +151,7 @@
}
-static void alloc_listener(char *addr, unsigned int port)
+static void alloc_listener(process_rec *process, char *addr, unsigned int
port)
{
ap_listen_rec **walk;
ap_listen_rec *new;
@@ -174,7 +174,7 @@
/* this has to survive restarts */
/* XXX - We need to deal with freeing this structure properly. */
- new = malloc(sizeof(ap_listen_rec));
+ new = ap_palloc(process->pool, sizeof(ap_listen_rec));
new->active = 0;
if (ap_create_tcp_socket(&new->sd, NULL) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_CRIT, NULL,
@@ -188,15 +188,16 @@
}
-int ap_listen_open(ap_context_t *pconf, unsigned port)
+int ap_listen_open(process_rec *process, unsigned port)
{
+ ap_context_t *pconf = process->pconf;
ap_listen_rec *lr;
ap_listen_rec *next;
int num_open;
/* allocate a default listener if necessary */
if (ap_listeners == NULL) {
- alloc_listener(APR_ANYADDR, port ? port : DEFAULT_HTTP_PORT);
+ alloc_listener(process, APR_ANYADDR, port ? port : DEFAULT_HTTP_PORT);
}
num_open = 0;
@@ -265,11 +266,11 @@
}
if (ports == ips) { /* no address */
- alloc_listener(APR_ANYADDR, port);
+ alloc_listener(cmd->server->process, APR_ANYADDR, port);
}
else {
ips[(ports - ips) - 1] = '\0';
- alloc_listener(ips, port);
+ alloc_listener(cmd->server->process, ips, port);
}
return NULL;
1.40 +2 -2 apache-2.0/src/modules/mpm/dexter/dexter.c
Index: dexter.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/mpm/dexter/dexter.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- dexter.c 1999/10/04 16:38:09 1.39
+++ dexter.c 1999/10/07 20:48:09 1.40
@@ -686,7 +686,7 @@
ap_listen_rec *lr;
int num_listeners = 0;
- if (ap_listen_open(p, s->port)) {
+ if (ap_listen_open(s->process, s->port)) {
return 0;
}
for (lr = ap_listeners; lr; lr = lr->next) {
@@ -1293,7 +1293,7 @@
exit(1);
}
server_conf = s;
- if ((num_listenfds = setup_listeners(pconf, server_conf)) < 1) {
+ if ((num_listenfds = setup_listeners(server_conf)) < 1) {
/* XXX: hey, what's the right way for the mpm to indicate a fatal
error? */
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, s,
"no listening sockets available, shutting down");
1.35 +3 -3 apache-2.0/src/modules/mpm/mpmt_pthread/mpmt_pthread.c
Index: mpmt_pthread.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/mpm/mpmt_pthread/mpmt_pthread.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- mpmt_pthread.c 1999/10/04 16:38:12 1.34
+++ mpmt_pthread.c 1999/10/07 20:48:13 1.35
@@ -674,11 +674,11 @@
}
}
-static int setup_listeners(ap_context_t *pconf, server_rec *s)
+static int setup_listeners(server_rec *s)
{
ap_listen_rec *lr;
int num_listeners = 0;
- if (ap_listen_open(pconf, s->port)) {
+ if (ap_listen_open(s->process, s->port)) {
return 0;
}
for (lr = ap_listeners; lr; lr = lr->next) {
@@ -1303,7 +1303,7 @@
exit(1);
}
server_conf = s;
- if ((num_listenfds = setup_listeners(pconf, server_conf)) < 1) {
+ if ((num_listenfds = setup_listeners(server_conf)) < 1) {
/* XXX: hey, what's the right way for the mpm to indicate a fatal
error? */
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, s,
"no listening sockets available, shutting down");
1.39 +1 -1 apache-2.0/src/modules/mpm/prefork/prefork.c
Index: prefork.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/mpm/prefork/prefork.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- prefork.c 1999/10/06 23:04:14 1.38
+++ prefork.c 1999/10/07 20:48:18 1.39
@@ -2535,7 +2535,7 @@
ap_listen_rec *lr;
int sockdes;
- if (ap_listen_open(p, s->port)) {
+ if (ap_listen_open(s->process, s->port)) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, s,
"no listening sockets available, shutting down");
return -1;
1.12 +3 -3 apache-2.0/src/modules/mpm/spmt_os2/spmt_os2.c
Index: spmt_os2.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/mpm/spmt_os2/spmt_os2.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- spmt_os2.c 1999/08/31 05:33:26 1.11
+++ spmt_os2.c 1999/10/07 20:48:23 1.12
@@ -1378,11 +1378,11 @@
}
-static int setup_listeners(ap_context_t *pconf, server_rec *s)
+static int setup_listeners(server_rec *s)
{
ap_listen_rec *lr;
- if (ap_listen_open(pconf, s->port)) {
+ if (ap_listen_open(s->process, s->port)) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, s,
"no listening sockets available, shutting down");
return -1;
@@ -1413,7 +1413,7 @@
server_conf = s;
ap_log_pid(pconf, ap_pid_fname);
- if (setup_listeners(pconf, s)) {
+ if (setup_listeners(s)) {
/* XXX: hey, what's the right way for the mpm to indicate a fatal
error? */
return 1;
}
1.16 +4 -4 apache-2.0/src/modules/mpm/winnt/winnt.c
Index: winnt.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/mpm/winnt/winnt.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- winnt.c 1999/10/05 07:01:24 1.15
+++ winnt.c 1999/10/07 20:48:26 1.16
@@ -363,7 +363,7 @@
}
return NULL;
}
-static int setup_listeners(ap_context_t *pconf, server_rec *s)
+static int setup_listeners(server_rec *s)
{
ap_listen_rec *lr;
int num_listeners = 0;
@@ -372,7 +372,7 @@
/* Setup the listeners */
FD_ZERO(&listenfds);
- if (ap_listen_open(pconf, s->port)) {
+ if (ap_listen_open(s->process, s->port)) {
return 0;
}
for (lr = ap_listeners; lr; lr = lr->next) {
@@ -1028,7 +1028,7 @@
/* start_mutex obtained, continue into the select() loop */
if (one_process) {
- setup_listeners(pconf, server_conf);
+ setup_listeners(server_conf);
} else {
/* Get listeners from the parent process */
setup_inherited_listeners(pconf, server_conf);
@@ -1343,7 +1343,7 @@
HANDLE process_handles[MAX_PROCESSES];
HANDLE process_kill_events[MAX_PROCESSES];
- setup_listeners(pconf, s);
+ setup_listeners(s);
/* Create child process
* Should only be one in this version of Apache for WIN32