--- /dev/null
+--- server/mpm/prefork/prefork.c 2009/01/31 20:53:11 739607
++++ 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
Summary(tr.UTF-8): Lider WWW tarayıcı
Name: apache
Version: 2.2.11
-Release: 2
+Release: 3
License: Apache v2.0
Group: Networking/Daemons/HTTP
Source0: http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz
Patch21: httpd-peruser.patch
Patch23: %{name}-suexec_fcgi.patch
Patch24: %{name}-revert-bug-40463.patch
+Patch25: %{name}-prefork-graceful-fix.patch
URL: http://httpd.apache.org/
BuildRequires: apr-devel >= 1:1.2
BuildRequires: apr-util-devel >= 1:1.3
%patch21 -p1
%patch23 -p1
%patch24 -p1
+%patch25 -p0
# using system apr, apr-util and pcre
rm -rf srclib/{apr,apr-util,pcre}