stoddard 99/08/16 15:36:26
Modified: mpm/src/modules/mpm/winnt winnt.c
Log:
Server will build and serve static pages (page size < bufsize) with the
appropriate makefile hacks (remove mod_cgi, mod_include, etc.).
Revision Changes Path
1.6 +33 -41 apache-2.0/mpm/src/modules/mpm/winnt/winnt.c
Index: winnt.c
===================================================================
RCS file: /home/cvs/apache-2.0/mpm/src/modules/mpm/winnt/winnt.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- winnt.c 1999/08/13 19:45:26 1.5
+++ winnt.c 1999/08/16 22:36:25 1.6
@@ -113,7 +113,7 @@
mutex *start_mutex;
int my_pid;
int parent_pid;
-int listenmaxfd;
+int listenmaxfd = -1;
/* a clean exit from a child with proper cleanup
static void clean_child_exit(int code) __attribute__ ((noreturn));
@@ -362,11 +362,20 @@
ap_listen_rec *lr;
int num_listeners = 0;
+ /* Setup the listeners */
+ listenmaxfd = -1;
+ FD_ZERO(&listenfds);
+
if (ap_listen_open(pconf, s->port)) {
return 0;
}
for (lr = ap_listeners; lr; lr = lr->next) {
num_listeners++;
+ if (lr->fd >= 0) {
+ FD_SET(lr->fd, &listenfds);
+ if (lr->fd > listenmaxfd)
+ listenmaxfd = lr->fd;
+ }
}
head_listener = ap_listeners;
@@ -671,7 +680,7 @@
int csd = -1;
ap_iol *iol;
int srv = 0;
-
+ int conn_id = 1;
/* Note: current_conn used to be a defined at file scope as follows...
Since the signal code is
not being used in WIN32, make the variable local */
// static APACHE_TLS conn_rec *volatile current_conn;
@@ -776,7 +785,8 @@
current_conn = ap_new_connection(ptrans, server_conf, conn_io,
(struct sockaddr_in *) &sa_client,
- (struct sockaddr_in *) &sa_server);
+ (struct sockaddr_in *) &sa_server,
+ conn_id);
ap_process_connection(current_conn);
}
@@ -896,12 +906,8 @@
pchild = ap_make_sub_pool(pconf);
-// ap_standalone = 1;
-// sd = -1; ?? this variable is global in 1.3.x!
nthreads = ap_threads_per_child;
- my_pid = getpid();
-
// ap_restart_time = time(NULL);
// reinit_scoreboard(pconf);
@@ -1077,7 +1083,6 @@
destroy_semaphore(allowed_globals.jobsemaphore);
ap_destroy_mutex(allowed_globals.jobmutex);
-// ap_child_exit_modules(pconf, server_conf);
ap_destroy_pool(pchild);
// cleanup_scoreboard();
@@ -1139,7 +1144,6 @@
int rv;
char buf[1024];
char *pCommand;
- char *pEnvBlock;
STARTUPINFO si; /* Filled in prior to call to CreateProcess */
PROCESS_INFORMATION pi; /* filled in on call to CreateProces */
@@ -1179,7 +1183,6 @@
return -1;
}
-// pEnvBlock = ap_psprintf(p, "AP_PARENT_PID=%d\0",parent_pid);
SetEnvironmentVariable("AP_PARENT_PID",ap_psprintf(p,"%d",parent_pid));
/* Give the read in of the pipe (hPipeRead) to the child as stdin. The
@@ -1194,8 +1197,8 @@
if (!CreateProcess(NULL, pCommand, NULL, NULL,
TRUE, /* Inherit handles */
- CREATE_SUSPENDED, /* Creation flags */ // checkout
DETACHED_PROCESS here and in the CGI
- NULL, /* Environment block */
+ CREATE_SUSPENDED, /* Creation flags */
+ NULL, /* Environment block */
NULL,
&si, &pi)) {
ap_log_error(APLOG_MARK, APLOG_WIN32ERROR | APLOG_CRIT, server_conf,
@@ -1220,7 +1223,7 @@
/* Create the exit_event, apCHILD_PID */
kill_event = CreateEvent(NULL, TRUE, FALSE,
- ap_psprintf(pconf,"ap%d", pi.dwProcessId));
+ ap_psprintf(pconf,"apC%d",
pi.dwProcessId)); // exit_event_name...
if (!kill_event) {
ap_log_error(APLOG_MARK, APLOG_WIN32ERROR | APLOG_CRIT,
server_conf,
"Parent: Could not create exit event for child
process");
@@ -1450,7 +1453,7 @@
static void winnt_pre_config(pool *pconf, pool *plog, pool *ptemp)
{
char *pid;
- one_process = !!getenv("ONE_PROCESS");
+ one_process=1;//!!getenv("ONE_PROCESS");
/* Track parent/child pids... */
pid = getenv("AP_PARENT_PID");
@@ -1474,7 +1477,6 @@
ap_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
- AMCSocketInitialize();
}
/*
@@ -1499,26 +1501,36 @@
if ((parent_pid != my_pid) || one_process) {
/* Child process */
- exit_event_name = ap_psprintf(pconf, "ap%d", my_pid);
- exit_event = open_event(exit_event_name);
+ AMCSocketInitialize();
+ exit_event_name = ap_psprintf(pconf, "apC%d", my_pid);
setup_signal_names(ap_psprintf(pconf,"ap%d", parent_pid));
- start_mutex = ap_open_mutex(signal_name_prefix);
+ if (one_process) {
+ start_mutex = ap_create_mutex(signal_name_prefix);
+ exit_event = CreateEvent(NULL, TRUE, FALSE, exit_event_name);
+ }
+ else {
+ start_mutex = ap_open_mutex(signal_name_prefix);
+ exit_event = open_event(exit_event_name);
+ }
ap_assert(start_mutex);
+ ap_assert(exit_event);
worker_main();
destroy_event(exit_event);
+ AMCSocketCleanup();
}
else {
/* Parent process */
static int restart = 0;
PSECURITY_ATTRIBUTES sa = GetNullACL(); /* returns NULL if invalid
(Win95?) */
+
ap_clear_pool(plog);
ap_open_logs(server_conf, plog);
if (!restart) {
/* service_set_status(SERVICE_START_PENDING);*/
-
+ AMCSocketInitialize();
setup_signal_names(ap_psprintf(pconf,"ap%d", parent_pid));
/* Create shutdown event, apPID_shutdown, where PID is the
parent
@@ -1550,8 +1562,7 @@
* child process from entering the accept loop at once.
*/
start_mutex = ap_create_mutex(signal_name_prefix);
-// start_mutex = ap_create_mutex(ap_psprintf(pconf,"ap%d",
parent_pid));
- /* TOTD: Add some code to detect failure */
+ /* TODO: Add some code to detect failure */
}
/* Go to work... */
@@ -1570,7 +1581,7 @@
CloseHandle(restart_event);
CloseHandle(shutdown_event);
-
+ AMCSocketCleanup();
/* service_set_status(SERVICE_STOPPED); */
}
return !restart;
@@ -1584,24 +1595,8 @@
one_process = 0;
/* Configuration hooks implemented by http_config.c ... */
ap_hook_pre_config(winnt_pre_config, NULL, NULL, HOOK_MIDDLE);
- /*
- ap_hook_post_config()...);
- ap_hook_open_logs(xxx,NULL,NULL,HOOK_MIDDLE);
- */
-
-/*
- ap_hook_translate_name(xxx,NULL,NULL,HOOK_REALLY_LAST);
- ap_hook_process_connection(xxx,NULL,NULL,
- HOOK_REALLY_LAST);
- ap_hook_http_method(xxx,NULL,NULL,HOOK_REALLY_LAST);
- ap_hook_default_port(xxx,NULL,NULL,HOOK_REALLY_LAST);
-
- // FIXME: I suspect we can eliminate the need for these - Ben
- ap_hook_type_checker(xxx,NULL,NULL,HOOK_REALLY_LAST);
-*/
}
-
/*
* Command processors
*/
@@ -1752,15 +1747,12 @@
module MODULE_VAR_EXPORT mpm_winnt_module = {
STANDARD20_MODULE_STUFF,
- NULL, /* child_init */
NULL, /* create per-directory config structure */
NULL, /* merge per-directory config structures */
NULL, /* create per-server config structure */
NULL, /* merge per-server config structures */
winnt_cmds, /* command table */
NULL, /* handlers */
- NULL, /* check auth */
- NULL, /* check access */
winnt_hooks /* register_hooks */
};