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