Commit 984f01b5 authored by Eric Covener's avatar Eric Covener
Browse files

Merge r732421, r732451 from trunk:

Release the accept mutex after receiving the shutdown signal
in single-process mode.  (That isn't a critical step, but
neatness counts.)

Submitted by: rpleum



prefork: Fix child process hang during graceful restart/stop in
configurations with multiple listening sockets.

PR: 42829
Submitted by: Joe Orton, with some tweaking and testing from me

Reviewed by: trawick, rpluem, jorton, pgollucci



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@739608 13f79535-47bb-0310-9956-ffa450edef68
parent 31c42f0b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
                                                         -*- coding: utf-8 -*-
Changes with Apache 2.2.12
  
 *) prefork: Fix child process hang during graceful restart/stop in
    configurations with multiple listening sockets.  PR 42829.  [Joe Orton,
    Jeff Trawick]

  *) mod_ssl: Add SSLRenegBufferSize directive to allow changing the
     size of the buffer used for the request-body where necessary
     during a per-dir renegotiation.  PR 39243.  [Joe Orton]
+0 −11
Original line number Diff line number Diff line
@@ -86,17 +86,6 @@ RELEASE SHOWSTOPPERS:
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
  [ start all new proposals below, under PATCHES PROPOSED. ]

 * prefork: release mutex when exiting in single-process mode,
   add timeout to pollset-poll to avoid hanging during graceful
   stop/restart with multiple listening sockets
   PR 42829
   Trunk version of patche:
     http://svn.apache.org/viewvc?rev=732421&view=rev
     http://svn.apache.org/viewvc?rev=732451&view=rev
   Backport version for 2.2.x of patch:
      Trunk version of patch works
   +1: trawick, rpluem, jorton, pgollucci

 * mod_proxy: Set the error time if we set a worker in error mode.
   Trunk version of patch:
      http://svn.apache.org/viewvc?rev=734703&view=rev
+20 −12
Original line number Diff line number Diff line
@@ -577,11 +577,11 @@ static void child_main(int child_num_arg)
                apr_int32_t numdesc;
                const apr_pollfd_t *pdesc;

                /* timeout == -1 == wait forever */
                status = apr_pollset_poll(pollset, -1, &numdesc, &pdesc);
                if (status != APR_SUCCESS) {
                    if (APR_STATUS_IS_EINTR(status)) {
                /* 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) {
@@ -590,6 +590,14 @@ static void child_main(int child_num_arg)
                    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_TIMEUP(status) ||
                        APR_STATUS_IS_EINTR(status)) {
                        continue;
                    }
                    /* Single Unix documents select as returning errnos