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...