]> granicus.if.org Git - apache/commitdiff
core: Avoid some unexpected connection closes by telling the client
authorJeff Trawick <trawick@apache.org>
Wed, 14 Nov 2007 11:53:30 +0000 (11:53 +0000)
committerJeff Trawick <trawick@apache.org>
Wed, 14 Nov 2007 11:53:30 +0000 (11:53 +0000)
that the connection is not persistent if the MPM process handling
the request is already exiting when the response header is built.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@594839 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/http/http_protocol.c

diff --git a/CHANGES b/CHANGES
index 32481c3205d5d192337444d933a48ad5714970d9..6107f91c089417abcfc99eaadc25108fa80934c5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,11 @@
 Changes with Apache 2.3.0
 [ When backported to 2.2.x, remove entry from this file ]
 
+  *) core: Avoid some unexpected connection closes by telling the client
+     that the connection is not persistent if the MPM process handling
+     the request is already exiting when the response header is built.
+     [Jeff Trawick] 
+
   *) mod_serf: New module for Reverse Proxying. [Paul Querna]
 
   *) mod_autoindex: Generate valid XHTML output by adding the xhtml
index d8886af19bb5af2d160df4937a36f21ba5d564eb..3d123c9e733cd5dee1ed1d7a9b6b396af591d121 100644 (file)
@@ -48,6 +48,7 @@
 #include "util_charset.h"
 #include "util_ebcdic.h"
 #include "util_time.h"
+#include "ap_mpm.h"
 
 #include "mod_core.h"
 
@@ -187,6 +188,7 @@ AP_DECLARE(int) ap_set_keepalive(request_rec *r)
      *       or they're a buggy twit coming through a HTTP/1.1 proxy
      *   and    the client is requesting an HTTP/1.0-style keep-alive
      *       or the client claims to be HTTP/1.1 compliant (perhaps a proxy);
+     *   and this MPM process is not already exiting
      *   THEN we can be persistent, which requires more headers be output.
      *
      * Note that the condition evaluation order is extremely important.
@@ -212,7 +214,8 @@ AP_DECLARE(int) ap_set_keepalive(request_rec *r)
         && (!apr_table_get(r->subprocess_env, "nokeepalive")
             || apr_table_get(r->headers_in, "Via"))
         && ((ka_sent = ap_find_token(r->pool, conn, "keep-alive"))
-            || (r->proto_num >= HTTP_VERSION(1,1)))) {
+            || (r->proto_num >= HTTP_VERSION(1,1)))
+        && !ap_graceful_stop_signalled()) {
         int left = r->server->keep_alive_max - r->connection->keepalives;
 
         r->connection->keepalive = AP_CONN_KEEPALIVE;