Commit 1338c116 authored by Paul Querna's avatar Paul Querna
Browse files

*) server/mpm_common.c: Send a simple HTTP 1.0 request to every listener...

*) server/mpm_common.c: Send a simple HTTP 1.0 request to every listener socket, instead of just closing the socket.  This fixes shutdown of the Worker MPM on FreeBSD, when Accept Filters are enabled.

In the future, we need a method to send a simple request for all protocols.  Currently this is very specific to HTTP and FreeBSD's Accept Filter.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@202027 13f79535-47bb-0310-9956-ffa450edef68
parent b3537aef
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGES: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
Changes with Apache 2.1.7
  [Remove entries to the current 2.0 section below, when backported]
  *) Fix shutdown for the Worker MPM when an Accept Filter is used. Instead of 
     just closing the socket, a HTTP request is made, to make sure the child is 
     always awakened. [Paul Querna]
Changes with Apache 2.1.6
  *) Fix htdbm password validation for records which included comments.
+11 −0
Changes for server/mpm_common.c: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -546,6 +546,7 @@ static apr_status_t pod_signal_internal(ap_pod_t *pod)
 */
static apr_status_t dummy_connection(ap_pod_t *pod)
{
    const char* srequest = "GET / HTTP/1.0\r\n\r\n";
    apr_status_t rv;
    apr_socket_t *sock;
    apr_pool_t *p;
@@ -596,6 +597,16 @@ static apr_status_t dummy_connection(ap_pod_t *pod)
                     "connect to listener on %pI", ap_listeners->bind_addr);
    }

    /* Since some operating systems support buffering of data or entire 
     * requests in the kernel, we send a simple request, to make sure 
     * the server pops out of a blocking accept(). 
     */
    /* XXX: This is HTTP specific. We should look at the Protocol for each 
     * listener, and send the correct type of request to trigger any Accept
     * Filters.
     */
    apr_socket_send(sock, srequest, strlen(srequest));
    apr_socket_shutdown(sock, APR_SHUTDOWN_WRITE);
    apr_socket_close(sock);
    apr_pool_destroy(p);