[Tomasz Kepczynski <tomek jot23.org>]
*) Add AP_MPMQ_MPM_STATE function code for ap_mpm_query. (Not yet
- supported for BeOS, OS/2, or Win32 MPMs.) [Jeff Trawick,
- Brad Nicholes]
+ supported for BeOS or OS/2 MPMs.) [Jeff Trawick, Brad Nicholes,
+ Bill Stoddard]
*) Add mod_status hook to allow modules to add to the mod_status
report. [Joe Orton]
APACHE 2.0 STATUS: -*-text-*-
-Last modified at [$Date: 2004/02/29 14:13:16 $]
+Last modified at [$Date: 2004/02/29 14:53:00 $]
Release:
shows breakage on Solaris which can't -lcrypto -lssl without
the extra pkgconfig/openssl.pc Libs: * foo }
- * PREREQ for another fix (stranded piped logger processes) -
- ap_mpm_query(AP_MPMQ_MPM_STATE)
- No updates are available at present for the BeOS or OS/2 MPMs,
- but that is not a showstopper for the other changes.
- server/mpm/winnt/mpm_winnt.c r1.303, r1.306
- server/mpm/winnt/mpm_winnt.h r1.44
- server/mpm/winnt/child.c r1.21
- +1: trawick, stoddard, ake
-
* piped log programs respawning after Apache is stopped. PR 24805
bogus "piped log program '(null)' failed" messages during
restart. PR 21648. Two people have tested a similar log.c patch
/* child_main() should never need to modify is_graceful!?! */
extern int volatile is_graceful;
-
/* Queue for managing the passing of COMP_CONTEXTs between
* the accept and worker threads.
*/
if (!listener_started && threads_created) {
create_listener_thread();
listener_started = 1;
+ winnt_mpm_state = AP_MPMQ_RUNNING;
}
if (threads_created == ap_threads_per_child) {
break;
*/
shutdown:
+
+ winnt_mpm_state = AP_MPMQ_STOPPING;
/* Setting is_graceful will cause threads handling keep-alive connections
* to close the connection after handling the current request.
*/
static int thread_limit = DEFAULT_THREAD_LIMIT;
static int first_thread_limit = 0;
static int changed_limit_at_restart;
+int winnt_mpm_state = AP_MPMQ_STARTING;
/* ap_my_generation are used by the scoreboard code */
ap_generation_t volatile ap_my_generation=0;
ap_scoreboard_image->parent[0].pid = child_pid;
/* Wait for shutdown or restart events or for child death */
+ winnt_mpm_state = AP_MPMQ_RUNNING;
rv = WaitForMultipleObjects(NUM_WAIT_HANDLES, (HANDLE *) event_handles, FALSE, INFINITE);
cld = rv - WAIT_OBJECT_0;
if (rv == WAIT_FAILED) {
if (shutdown_pending)
{
int timeout = 30000; /* Timeout is milliseconds */
+ winnt_mpm_state = AP_MPMQ_STOPPING;
/* This shutdown is only marginally graceful. We will give the
* child a bit of time to exit gracefully. If the time expires,
}
return 0; /* Tell the caller we do not want to restart */
}
-
+ winnt_mpm_state = AP_MPMQ_STARTING;
return 1; /* Tell the caller we want a restart */
}
case AP_MPMQ_MAX_DAEMONS:
*result = 0;
return APR_SUCCESS;
+ case AP_MPMQ_MPM_STATE:
+ *result = winnt_mpm_state;
+ return APR_SUCCESS;
}
return APR_ENOTIMPL;
}
/* From winnt.c: */
extern int use_acceptex;
+extern int winnt_mpm_state;
extern OSVERSIONINFO osver;
extern void clean_child_exit(int);