You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by st...@apache.org on 2001/10/17 17:51:22 UTC
cvs commit: httpd-2.0/server/mpm/winnt mpm_winnt.c mpm_winnt.h service.c
stoddard 01/10/17 08:51:22
Modified: server/mpm/winnt mpm_winnt.c mpm_winnt.h service.c
Log:
Win32: Deprecate ap_start_shutdown/ap_start_restart in favor of ap_signal_parent(enum).
This simplifies the code a bit for some more MPM cleanup work forthcoming.
Revision Changes Path
1.179 +26 -32 httpd-2.0/server/mpm/winnt/mpm_winnt.c
Index: mpm_winnt.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/mpm_winnt.c,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -r1.178 -r1.179
--- mpm_winnt.c 2001/08/30 20:50:06 1.178
+++ mpm_winnt.c 2001/10/17 15:51:22 1.179
@@ -292,26 +292,39 @@
"%s_restart", signal_name_prefix);
}
-void signal_parent(int type)
+static int volatile is_graceful = 0;
+AP_DECLARE(int) ap_graceful_stop_signalled(void)
+{
+ return is_graceful;
+}
+
+AP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type)
{
HANDLE e;
char *signal_name;
- /* after updating the shutdown_pending or restart flags, we need
- * to wake up the parent process so it can see the changes. The
- * parent will normally be waiting for either a child process
- * to die, or for a signal on the "spache-signal" event. So set the
- * "apache-signal" event here.
- */
if (one_process) {
return;
}
switch(type) {
- case 0: signal_name = signal_shutdown_name; break;
- case 1: signal_name = signal_restart_name; break;
- default: return;
+ case SIGNAL_PARENT_SHUTDOWN:
+ {
+ signal_name = signal_shutdown_name;
+ break;
+ }
+ /* This MPM supports only graceful restarts right now */
+ case SIGNAL_PARENT_RESTART:
+ case SIGNAL_PARENT_RESTART_GRACEFUL:
+ {
+ signal_name = signal_restart_name;
+ is_graceful = 1;
+ break;
+ }
+ default:
+ return;
}
+
e = OpenEvent(EVENT_ALL_ACCESS, FALSE, signal_name);
if (!e) {
/* Um, problem, can't signal the parent, which means we can't
@@ -331,25 +344,6 @@
CloseHandle(e);
}
-static int volatile is_graceful = 0;
-
-AP_DECLARE(int) ap_graceful_stop_signalled(void)
-{
- return is_graceful;
-}
-
-AP_DECLARE(void) ap_start_shutdown(void)
-{
- signal_parent(0);
-}
-
-AP_DECLARE(void) ap_start_restart(int gracefully)
-{
- is_graceful = gracefully;
- signal_parent(1);
-}
-
-
/*
* find_ready_listener()
* Only used by Win9* and should go away when the win9*_accept() function is
@@ -409,7 +403,7 @@
&BytesRead, (LPOVERLAPPED) NULL)) {
ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), server_conf,
"setup_inherited_listeners: Unable to read socket data from parent");
- signal_parent(0); /* tell parent to die */
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
exit(1);
}
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, APR_SUCCESS, server_conf,
@@ -419,7 +413,7 @@
if (nsd == INVALID_SOCKET) {
ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_netos_error(), server_conf,
"Child %d: setup_inherited_listeners(), WSASocket failed to open the inherited socket.", my_pid);
- signal_parent(0); /* tell parent to die */
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
exit(1);
}
apr_os_sock_put(&lr->sd, &nsd, pconf);
@@ -992,7 +986,7 @@
if (status != APR_SUCCESS) {
ap_log_error(APLOG_MARK,APLOG_ERR, status, server_conf,
"Child %d: Failed to acquire the start_mutex. Process will exit.", my_pid);
- signal_parent(0); /* tell parent to die */
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
exit(0);
}
ap_log_error(APLOG_MARK,APLOG_INFO, APR_SUCCESS, server_conf,
1.29 +6 -4 httpd-2.0/server/mpm/winnt/mpm_winnt.h
Index: mpm_winnt.h
===================================================================
RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/mpm_winnt.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- mpm_winnt.h 2001/08/17 17:00:07 1.28
+++ mpm_winnt.h 2001/10/17 15:51:22 1.29
@@ -117,12 +117,14 @@
extern OSVERSIONINFO osver;
extern void clean_child_exit(int);
-AP_DECLARE(void) ap_start_shutdown(void);
-AP_DECLARE(void) ap_start_restart(int gracefully);
-
void setup_signal_names(char *prefix);
-void signal_parent(int type);
+typedef enum {
+ SIGNAL_PARENT_SHUTDOWN,
+ SIGNAL_PARENT_RESTART,
+ SIGNAL_PARENT_RESTART_GRACEFUL
+} ap_signal_parent_e;
+AP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type);
/* This code is stolen from the apr_private.h and misc/win32/misc.c
* Please see those sources for detailed documentation.
1.39 +8 -8 httpd-2.0/server/mpm/winnt/service.c
Index: service.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/service.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- service.c 2001/09/24 22:02:14 1.38
+++ service.c 2001/10/17 15:51:22 1.39
@@ -183,7 +183,7 @@
if ((msg == WM_ENDSESSION)
&& (die_on_logoff || (lParam != ENDSESSION_LOGOFF)))
{
- signal_parent(0);
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
if (wParam)
/* Don't leave this message until we are dead! */
WaitForSingleObject(globdat.mpm_thread, 30000);
@@ -274,7 +274,7 @@
{
case CTRL_BREAK_EVENT:
fprintf(stderr, "Apache server restarting...\n");
- signal_parent(1);
+ ap_signal_parent(SIGNAL_PARENT_RESTART);
return TRUE;
case CTRL_C_EVENT:
fprintf(stderr, "Apache server interrupted...\n");
@@ -282,7 +282,7 @@
* Tell the system we have dealt with the signal
* without waiting for Apache to terminate.
*/
- signal_parent(0);
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
return TRUE;
case CTRL_CLOSE_EVENT:
@@ -295,7 +295,7 @@
* THESE EVENTS WILL NOT OCCUR UNDER WIN9x!
*/
fprintf(stderr, "Apache server shutdown initiated...\n");
- signal_parent(0);
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
Sleep(30000);
return TRUE;
}
@@ -484,14 +484,14 @@
{
if (dwCtrlCode == SERVICE_CONTROL_STOP)
{
- ap_start_shutdown();
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
globdat.ssStatus.dwCurrentState = SERVICE_STOP_PENDING;
ReportStatusToSCMgr(SERVICE_STOP_PENDING, NO_ERROR, 3000);
return;
}
if (dwCtrlCode == SERVICE_APACHE_RESTART)
{
- ap_start_restart(1);
+ ap_signal_parent(SIGNAL_PARENT_RESTART);
globdat.ssStatus.dwCurrentState = SERVICE_START_PENDING;
ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR, 3000);
return;
@@ -1337,7 +1337,7 @@
if (!signal)
{
int ticks = 60;
- ap_start_shutdown();
+ ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
while (--ticks)
{
if (!IsWindow(hwnd)) {
@@ -1360,7 +1360,7 @@
}
else {
success = TRUE;
- ap_start_restart(1);
+ ap_signal_parent(SIGNAL_PARENT_RESTART);
}
}
}