From 51df5d37cb7a8b4f59ae6775a7f995600da8af69 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Mon, 24 Nov 2008 18:33:09 +0000 Subject: [PATCH] Make %k work as it should. No regression noted in perl test framework. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@720250 13f79535-47bb-0310-9956-ffa450edef68 --- modules/http/http_protocol.c | 14 ++++++++++++-- modules/loggers/mod_log_config.c | 3 ++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index 1caaaa91b2..a0207b0f5a 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -176,6 +176,7 @@ static int is_mpm_running(void) AP_DECLARE(int) ap_set_keepalive(request_rec *r) { int ka_sent = 0; + int left = r->server->keep_alive_max - r->connection->keepalives; int wimpy = ap_find_token(r->pool, apr_table_get(r->headers_out, "Connection"), "close"); @@ -221,7 +222,7 @@ AP_DECLARE(int) ap_set_keepalive(request_rec *r) && r->server->keep_alive && (r->server->keep_alive_timeout > 0) && ((r->server->keep_alive_max == 0) - || (r->server->keep_alive_max > r->connection->keepalives)) + || (left > 0)) && !ap_status_drops_connection(r->status) && !wimpy && !ap_find_token(r->pool, conn, "close") @@ -230,7 +231,6 @@ AP_DECLARE(int) ap_set_keepalive(request_rec *r) && ((ka_sent = ap_find_token(r->pool, conn, "keep-alive")) || (r->proto_num >= HTTP_VERSION(1,1))) && is_mpm_running()) { - int left = r->server->keep_alive_max - r->connection->keepalives; r->connection->keepalive = AP_CONN_KEEPALIVE; r->connection->keepalives++; @@ -266,6 +266,16 @@ AP_DECLARE(int) ap_set_keepalive(request_rec *r) apr_table_mergen(r->headers_out, "Connection", "close"); } + /* + * If we had previously been a keepalive connection and this + * is the last one, then bump up the number of keepalives + * we've had + */ + if ((r->connection->keepalive != AP_CONN_CLOSE) + && r->server->keep_alive_max + && !left) { + r->connection->keepalives++; + } r->connection->keepalive = AP_CONN_CLOSE; return 0; diff --git a/modules/loggers/mod_log_config.c b/modules/loggers/mod_log_config.c index c54859e53e..8a2d4b29bf 100644 --- a/modules/loggers/mod_log_config.c +++ b/modules/loggers/mod_log_config.c @@ -697,7 +697,8 @@ static const char *log_connection_status(request_rec *r, char *a) static const char *log_requests_on_connection(request_rec *r, char *a) { - return apr_itoa(r->pool, r->connection->keepalives); + int num = r->connection->keepalives ? r->connection->keepalives - 1 : 0; + return apr_itoa(r->pool, num); } /***************************************************************** -- 2.40.0