httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pque...@apache.org
Subject svn commit: r202027 - in /httpd/httpd/trunk: CHANGES server/mpm_common.c
Date Mon, 27 Jun 2005 18:40:59 GMT
Author: pquerna
Date: Mon Jun 27 11:40:56 2005
New Revision: 202027

URL: http://svn.apache.org/viewcvs?rev=202027&view=rev
Log:
*) 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.

Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/server/mpm_common.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/CHANGES?rev=202027&r1=202026&r2=202027&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES (original)
+++ httpd/httpd/trunk/CHANGES Mon Jun 27 11:40:56 2005
@@ -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.

Modified: httpd/httpd/trunk/server/mpm_common.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/server/mpm_common.c?rev=202027&r1=202026&r2=202027&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm_common.c (original)
+++ httpd/httpd/trunk/server/mpm_common.c Mon Jun 27 11:40:56 2005
@@ -546,6 +546,7 @@
  */
 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 @@
                      "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);
 



Mime
View raw message