diff options
Diffstat (limited to '2.2/patches/05_all_fix_graceful_multiple_listeners.patch')
-rw-r--r-- | 2.2/patches/05_all_fix_graceful_multiple_listeners.patch | 42 |
1 files changed, 0 insertions, 42 deletions
diff --git a/2.2/patches/05_all_fix_graceful_multiple_listeners.patch b/2.2/patches/05_all_fix_graceful_multiple_listeners.patch deleted file mode 100644 index 6ed9de1..0000000 --- a/2.2/patches/05_all_fix_graceful_multiple_listeners.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- httpd/httpd/branches/2.2.x/server/mpm/prefork/prefork.c 2009/01/31 20:53:11 739607 -+++ httpd/httpd/branches/2.2.x/server/mpm/prefork/prefork.c 2009/01/31 20:54:55 739608 -@@ -577,19 +577,27 @@ - apr_int32_t numdesc; - const apr_pollfd_t *pdesc; - -- /* timeout == -1 == wait forever */ -- status = apr_pollset_poll(pollset, -1, &numdesc, &pdesc); -+ /* check for termination first so we don't sleep for a while in -+ * poll if already signalled -+ */ -+ if (one_process && shutdown_pending) { -+ SAFE_ACCEPT(accept_mutex_off()); -+ return; -+ } -+ else if (die_now) { -+ /* In graceful stop/restart; drop the mutex -+ * and terminate the child. */ -+ SAFE_ACCEPT(accept_mutex_off()); -+ clean_child_exit(0); -+ } -+ /* timeout == 10 seconds to avoid a hang at graceful restart/stop -+ * caused by the closing of sockets by the signal handler -+ */ -+ status = apr_pollset_poll(pollset, apr_time_from_sec(10), -+ &numdesc, &pdesc); - if (status != APR_SUCCESS) { -- if (APR_STATUS_IS_EINTR(status)) { -- if (one_process && shutdown_pending) { -- return; -- } -- else if (die_now) { -- /* In graceful stop/restart; drop the mutex -- * and terminate the child. */ -- SAFE_ACCEPT(accept_mutex_off()); -- clean_child_exit(0); -- } -+ if (APR_STATUS_IS_TIMEUP(status) || -+ APR_STATUS_IS_EINTR(status)) { - continue; - } - /* Single Unix documents select as returning errnos |