From 835a6ad45edfbe019bba64559304190cb1eb7d3f Mon Sep 17 00:00:00 2001 From: Bradley Nicholes Date: Thu, 12 Dec 2002 19:40:52 +0000 Subject: [PATCH] Register for the SERVERDOWN event to allow Apache to shutdown gracefully when the NetWare OS is shutdown git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@97898 13f79535-47bb-0310-9956-ffa450edef68 --- os/netware/util_nw.c | 63 +++++++++++++++++++++++++++++++- server/mpm/netware/mpm_netware.c | 8 ++-- 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/os/netware/util_nw.c b/os/netware/util_nw.c index 005b1a95cc..a9a411885d 100644 --- a/os/netware/util_nw.c +++ b/os/netware/util_nw.c @@ -60,8 +60,11 @@ #include "http_log.h" #include +#include -int nlmUnloadSignaled(); +int nlmUnloadSignaled(int wait); +event_handle_t eh; +Warn_t ref; AP_DECLARE(apr_status_t) ap_os_create_privileged_process( const request_rec *r, @@ -75,5 +78,61 @@ AP_DECLARE(apr_status_t) ap_os_create_privileged_process( int _NonAppCheckUnload( void ) { - return nlmUnloadSignaled(); + return nlmUnloadSignaled(1); } + +// down server event callback +void ap_down_server_cb(void *, void *) +{ + nlmUnloadSignaled(0); + return; +} + +// destroy callback resources +void ap_cb_destroy(void *) +{ + // cleanup down event notification + UnRegisterEventNotification(eh); + NX_UNWRAP_INTERFACE(ref); +} + +int _NonAppStart +( + void *NLMHandle, + void *errorScreen, + const char *cmdLine, + const char *loadDirPath, + size_t uninitializedDataLength, + void *NLMFileHandle, + int (*readRoutineP)( int conn, void *fileHandle, size_t offset, + size_t nbytes, size_t *bytesRead, void *buffer ), + size_t customDataOffset, + size_t customDataSize, + int messageCount, + const char **messages +) +{ +#pragma unused(cmdLine) +#pragma unused(loadDirPath) +#pragma unused(uninitializedDataLength) +#pragma unused(NLMFileHandle) +#pragma unused(readRoutineP) +#pragma unused(customDataOffset) +#pragma unused(customDataSize) +#pragma unused(messageCount) +#pragma unused(messages) + + // register for down server event + rtag_t rt = AllocateResourceTag(NLMHandle, "Apache2 Down Server Callback", + EventSignature); + + NX_WRAP_INTERFACE((void *)ap_down_server_cb, 2, (void **)&ref); + eh = RegisterForEventNotification(rt, EVENT_DOWN_SERVER, + EVENT_PRIORITY_APPLICATION, + ref, NULL, NULL); + + // clean-up + NXVmRegisterExitHandler(ap_cb_destroy, NULL); + +} + diff --git a/server/mpm/netware/mpm_netware.c b/server/mpm/netware/mpm_netware.c index 658c4af1b9..18d7994413 100644 --- a/server/mpm/netware/mpm_netware.c +++ b/server/mpm/netware/mpm_netware.c @@ -318,12 +318,14 @@ static void set_signals(void) apr_signal(SIGABRT, sig_term); } -int nlmUnloadSignaled() +int nlmUnloadSignaled(int wait) { shutdown_pending = 1; - while (wait_to_finish) { - NXThreadYield(); + if (wait) { + while (wait_to_finish) { + NXThreadYield(); + } } return 0; -- 2.40.0