From 22d8e0d8ba497f0fa8daf35ef03cc4d3f98409d0 Mon Sep 17 00:00:00 2001 From: Jeff Trawick Date: Wed, 14 Nov 2007 11:53:30 +0000 Subject: [PATCH] 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. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@594839 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 5 +++++ modules/http/http_protocol.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 32481c3205..6107f91c08 100644 --- 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 diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index d8886af19b..3d123c9e73 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -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; -- 2.40.0