From d72e95a02ca302e77f91036d88b9edcc66692be7 Mon Sep 17 00:00:00 2001 From: Paul Querna Date: Mon, 27 Jun 2005 18:40:56 +0000 Subject: [PATCH] *) 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 --- CHANGES | 4 ++++ server/mpm_common.c | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/CHANGES b/CHANGES index 57082f25a7..0e1cdd60d8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ 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. diff --git a/server/mpm_common.c b/server/mpm_common.c index 619e53892f..9238f2ebb6 100644 --- a/server/mpm_common.c +++ b/server/mpm_common.c @@ -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); -- 2.40.0