You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by je...@apache.org on 2002/06/26 21:45:08 UTC
cvs commit: httpd-2.0/server core.c protocol.c
jerenkrantz 2002/06/26 12:45:08
Modified: . CHANGES
include ap_mmn.h httpd.h
modules/arch/win32 mod_isapi.c
modules/http http_core.c http_protocol.c http_request.c
modules/loggers mod_log_config.c
modules/proxy proxy_http.c
server core.c protocol.c
Log:
Change conn_rec->keepalive to an enumerated value of
AP_CONN_UNKNOWN
AP_CONN_CLOSE
AP_CONN_KEEPALIVE
This also fixes a problem where ap_discard_request_body would not discard
the body when keepalive was 0. This actually meant the keepalive status
was unknown *not* closed, but no one ever remembered that.
This problem was seen with mod_dav sending error responses (as reported by
Karl Fogel).
Suggested by: Greg "this isn't the '80s" Stein
Reviewed by: Greg Ames
Revision Changes Path
1.851 +3 -0 httpd-2.0/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-2.0/CHANGES,v
retrieving revision 1.850
retrieving revision 1.851
diff -u -r1.850 -r1.851
--- CHANGES 26 Jun 2002 13:01:49 -0000 1.850
+++ CHANGES 26 Jun 2002 19:45:05 -0000 1.851
@@ -1,5 +1,8 @@
Changes with Apache 2.0.40
+ *) Switch conn_rec->keepalive to an enumeration rather than a bitfield.
+ [Justin Erenkrantz]
+
*) Fix mod_ext_filter to look in the main server for filter definitions
when running in a vhost if the filter definition is not found in
the vhost. PR 10147 [Jeff Trawick]
1.50 +3 -2 httpd-2.0/include/ap_mmn.h
Index: ap_mmn.h
===================================================================
RCS file: /home/cvs/httpd-2.0/include/ap_mmn.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- ap_mmn.h 12 Jun 2002 23:59:29 -0000 1.49
+++ ap_mmn.h 26 Jun 2002 19:45:06 -0000 1.50
@@ -108,14 +108,15 @@
* 20020529 (2.0.37-dev) Standardized the names of some apr_pool_*_set funcs
* 20020602 (2.0.37-dev) Bucket API change (metadata buckets)
* 20020612 (2.0.38-dev) Changed server_rec->[keep_alive_]timeout to apr time
+ * 20020625 (2.0.40-dev) Changed conn_rec->keepalive to an enumeration
*/
#define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
#ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 20020612
+#define MODULE_MAGIC_NUMBER_MAJOR 20020625
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */
/**
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
1.188 +7 -2 httpd-2.0/include/httpd.h
Index: httpd.h
===================================================================
RCS file: /home/cvs/httpd-2.0/include/httpd.h,v
retrieving revision 1.187
retrieving revision 1.188
diff -u -r1.187 -r1.188
--- httpd.h 23 Jun 2002 09:01:22 -0000 1.187
+++ httpd.h 26 Jun 2002 19:45:06 -0000 1.188
@@ -951,6 +951,11 @@
/* @} */
+typedef enum {
+ AP_CONN_UNKNOWN,
+ AP_CONN_CLOSE,
+ AP_CONN_KEEPALIVE
+} ap_conn_keepalive_e;
/** Structure to store things which are per connection */
struct conn_rec {
@@ -981,8 +986,8 @@
unsigned aborted:1;
/** Are we going to keep the connection alive for another request?
- * -1 fatal error, 0 undecided, 1 yes */
- signed int keepalive:2;
+ * @see ap_conn_keepalive_e */
+ ap_conn_keepalive_e keepalive;
/** have we done double-reverse DNS? -1 yes/failure, 0 not yet,
* 1 yes/success */
1.82 +1 -1 httpd-2.0/modules/arch/win32/mod_isapi.c
Index: mod_isapi.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/arch/win32/mod_isapi.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- mod_isapi.c 12 Jun 2002 22:27:37 -0000 1.81
+++ mod_isapi.c 26 Jun 2002 19:45:06 -0000 1.82
@@ -1093,7 +1093,7 @@
return 0;
case HSE_REQ_IS_KEEP_CONN:
- *((int *)buf_data) = (r->connection->keepalive == 1);
+ *((int *)buf_data) = (r->connection->keepalive == AP_CONN_KEEPALIVE);
return 1;
case HSE_REQ_ASYNC_READ_CLIENT:
1.304 +2 -2 httpd-2.0/modules/http/http_core.c
Index: http_core.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/http/http_core.c,v
retrieving revision 1.303
retrieving revision 1.304
diff -u -r1.303 -r1.304
--- http_core.c 12 Jun 2002 23:59:30 -0000 1.303
+++ http_core.c 26 Jun 2002 19:45:06 -0000 1.304
@@ -283,7 +283,7 @@
ap_update_child_status(c->sbh, SERVER_BUSY_READ, NULL);
while ((r = ap_read_request(c)) != NULL) {
- c->keepalive = 0;
+ c->keepalive = AP_CONN_UNKNOWN;
/* process the request if it was read without error */
ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
@@ -293,7 +293,7 @@
if (ap_extended_status)
ap_increment_counts(c->sbh, r);
- if (!c->keepalive || c->aborted)
+ if (c->keepalive != AP_CONN_KEEPALIVE || c->aborted)
break;
ap_update_child_status(c->sbh, SERVER_BUSY_KEEPALIVE, r);
1.442 +7 -7 httpd-2.0/modules/http/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/http/http_protocol.c,v
retrieving revision 1.441
retrieving revision 1.442
diff -u -r1.441 -r1.442
--- http_protocol.c 24 Jun 2002 17:06:19 -0000 1.441
+++ http_protocol.c 26 Jun 2002 19:45:06 -0000 1.442
@@ -223,7 +223,7 @@
*
* Note that the condition evaluation order is extremely important.
*/
- if ((r->connection->keepalive != -1)
+ if ((r->connection->keepalive != AP_CONN_CLOSE)
&& ((r->status == HTTP_NOT_MODIFIED)
|| (r->status == HTTP_NO_CONTENT)
|| r->header_only
@@ -247,7 +247,7 @@
|| (r->proto_num >= HTTP_VERSION(1,1)))) {
int left = r->server->keep_alive_max - r->connection->keepalives;
- r->connection->keepalive = 1;
+ r->connection->keepalive = AP_CONN_KEEPALIVE;
r->connection->keepalives++;
/* If they sent a Keep-Alive token, send one back */
@@ -281,7 +281,7 @@
apr_table_mergen(r->headers_out, "Connection", "close");
}
- r->connection->keepalive = 0;
+ r->connection->keepalive = AP_CONN_CLOSE;
return 0;
}
@@ -1162,7 +1162,7 @@
if (r->proto_num == HTTP_VERSION(1,0)
&& apr_table_get(r->subprocess_env, "force-response-1.0")) {
*protocol = "HTTP/1.0";
- r->connection->keepalive = -1;
+ r->connection->keepalive = AP_CONN_CLOSE;
}
else {
*protocol = AP_SERVER_PROTOCOL;
@@ -1835,7 +1835,7 @@
/* if we actually fail here, we want to just return and
* stop trying to read data from the client.
*/
- r->connection->keepalive = -1;
+ r->connection->keepalive = AP_CONN_CLOSE;
return -1;
}
@@ -1882,8 +1882,8 @@
*
* This function is also a no-op on a subrequest.
*/
- if (r->main || !r->connection->keepalive
- || ap_status_drops_connection(r->status)) {
+ if (r->main || r->connection->keepalive == AP_CONN_CLOSE ||
+ ap_status_drops_connection(r->status)) {
return OK;
}
1.150 +2 -2 httpd-2.0/modules/http/http_request.c
Index: http_request.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/http/http_request.c,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -r1.149 -r1.150
--- http_request.c 21 Jun 2002 13:58:39 -0000 1.149
+++ http_request.c 26 Jun 2002 19:45:06 -0000 1.150
@@ -143,7 +143,7 @@
* connection, be sure that the request body (if any) has been read.
*/
if (ap_status_drops_connection(r->status)) {
- r->connection->keepalive = 0;
+ r->connection->keepalive = AP_CONN_CLOSE;
}
/*
@@ -216,7 +216,7 @@
*/
/* ### shouldn't this read from the connection input filters? */
/* ### is zero correct? that means "read one line" */
- if (!r->connection->keepalive ||
+ if (r->connection->keepalive == AP_CONN_CLOSE ||
ap_get_brigade(r->input_filters, bb, AP_MODE_EATCRLF,
APR_NONBLOCK_READ, 0) != APR_SUCCESS) {
apr_bucket *e = apr_bucket_flush_create(c->bucket_alloc);
1.85 +1 -1 httpd-2.0/modules/loggers/mod_log_config.c
Index: mod_log_config.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/loggers/mod_log_config.c,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -r1.84 -r1.85
--- mod_log_config.c 9 Jun 2002 04:48:41 -0000 1.84
+++ mod_log_config.c 26 Jun 2002 19:45:07 -0000 1.85
@@ -585,7 +585,7 @@
if (r->connection->aborted)
return "X";
- if (r->connection->keepalive &&
+ if (r->connection->keepalive == AP_CONN_KEEPALIVE &&
(!r->server->keep_alive_max ||
(r->server->keep_alive_max - r->connection->keepalives) > 0)) {
return "+";
1.155 +3 -3 httpd-2.0/modules/proxy/proxy_http.c
Index: proxy_http.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_http.c,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -r1.154 -r1.155
--- proxy_http.c 23 Jun 2002 06:06:25 -0000 1.154
+++ proxy_http.c 26 Jun 2002 19:45:07 -0000 1.155
@@ -446,7 +446,7 @@
ap_proxy_clear_connection(p, r->headers_in);
if (p_conn->close) {
apr_table_setn(r->headers_in, "Connection", "close");
- origin->keepalive = 0;
+ origin->keepalive = AP_CONN_CLOSE;
}
if ( apr_table_get(r->subprocess_env,"force-proxy-request-1.0")) {
@@ -456,7 +456,7 @@
}
if ( apr_table_get(r->subprocess_env,"proxy-nokeepalive")) {
apr_table_unset(r->headers_in, "Connection");
- origin->keepalive = 0;
+ origin->keepalive = AP_CONN_CLOSE;
}
ap_xlate_proto_to_ascii(buf, strlen(buf));
e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc);
@@ -798,7 +798,7 @@
/* cancel keepalive if HTTP/1.0 or less */
if ((major < 1) || (minor < 1)) {
p_conn->close += 1;
- origin->keepalive = 0;
+ origin->keepalive = AP_CONN_CLOSE;
}
} else {
/* an http/0.9 response */
1.185 +4 -3 httpd-2.0/server/core.c
Index: core.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/core.c,v
retrieving revision 1.184
retrieving revision 1.185
diff -u -r1.184 -r1.185
--- core.c 15 Jun 2002 05:49:06 -0000 1.184
+++ core.c 26 Jun 2002 19:45:07 -0000 1.185
@@ -3293,7 +3293,7 @@
ap_input_mode_t mode, apr_read_type_e block,
apr_off_t readbytes)
{
- int keptalive = f->c->keepalive == 1;
+ int keptalive = f->c->keepalive == AP_CONN_KEEPALIVE;
apr_socket_t *csd = ap_get_module_config(f->c->conn_config, &core_module);
int *first_line = f->ctx;
@@ -3755,7 +3755,8 @@
&& (nbytes + flen < AP_MIN_BYTES_TO_WRITE)
&& !APR_BUCKET_IS_FLUSH(last_e))
|| (nbytes + flen < AP_MIN_BYTES_TO_WRITE
- && APR_BUCKET_IS_EOS(last_e) && c->keepalive)) {
+ && APR_BUCKET_IS_EOS(last_e)
+ && c->keepalive == AP_CONN_KEEPALIVE)) {
/* NEVER save an EOS in here. If we are saving a brigade with
* an EOS bucket, then we are doing keepalive connections, and
@@ -3824,7 +3825,7 @@
}
#if APR_HAS_SENDFILE
- if (!c->keepalive && APR_BUCKET_IS_EOS(last_e)) {
+ if (c->keepalive == AP_CONN_CLOSE && APR_BUCKET_IS_EOS(last_e)) {
/* Prepare the socket to be reused */
flags |= APR_SENDFILE_DISCONNECT_SOCKET;
}
1.107 +2 -1 httpd-2.0/server/protocol.c
Index: protocol.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/protocol.c,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -r1.106 -r1.107
--- protocol.c 10 Jun 2002 18:51:38 -0000 1.106
+++ protocol.c 26 Jun 2002 19:45:07 -0000 1.107
@@ -1187,7 +1187,8 @@
* We should be able to force connection close from this filter
* when we see we are buffering too much.
*/
- if ((r->proto_num >= HTTP_VERSION(1, 1)) || (!r->connection->keepalive)) {
+ if ((r->proto_num >= HTTP_VERSION(1, 1)) ||
+ (r->connection->keepalive == AP_CONN_CLOSE)) {
partial_send_okay = 1;
}
Re: cvs commit: httpd-2.0/server core.c protocol.c
Posted by Jeff Trawick <tr...@attglobal.net>.
jerenkrantz@apache.org writes:
> jerenkrantz 2002/06/26 12:45:08
>
> Modified: . CHANGES
> include ap_mmn.h httpd.h
> modules/arch/win32 mod_isapi.c
> modules/http http_core.c http_protocol.c http_request.c
> modules/loggers mod_log_config.c
> modules/proxy proxy_http.c
> server core.c protocol.c
> Log:
> Change conn_rec->keepalive to an enumerated value of
>
> AP_CONN_UNKNOWN
> AP_CONN_CLOSE
> AP_CONN_KEEPALIVE
>
> This also fixes a problem where ap_discard_request_body would not discard
> the body when keepalive was 0. This actually meant the keepalive status
> was unknown *not* closed, but no one ever remembered that.
>
> This problem was seen with mod_dav sending error responses (as reported by
> Karl Fogel).
Thanks, this resolves some bogus-chunk-header tests that started
failing with Greg Ames' commit a couple of days ago.
--
Jeff Trawick | trawick@attglobal.net
Born in Roswell... married an alien...