You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2001/08/01 21:15:22 UTC

cvs commit: httpd-2.0/server core.c

wrowe       01/08/01 12:15:22

  Modified:    server   core.c
  Log:
    This patch fixes more untold breakage than you can shake a stick at.
  
  Revision  Changes    Path
  1.32      +8 -3      httpd-2.0/server/core.c
  
  Index: core.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/core.c,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- core.c	2001/07/30 18:51:57	1.31
  +++ core.c	2001/08/01 19:15:22	1.32
  @@ -3077,6 +3077,7 @@
          to the connection. */
       while (b) {
           apr_size_t nbytes = 0;
  +        apr_bucket *last_e = NULL; /* initialized for debugging */
           apr_bucket *e;
   
           /* tail of brigade if we need another pass */
  @@ -3095,6 +3096,10 @@
   
           /* Iterate over the brigade: collect iovecs and/or a file */
           APR_BRIGADE_FOREACH(e, b) {
  +            /* XXX: APR_BRIGADE_FOREACH breaks the value of e! 
  +             * is that the expected behavior?
  +             */
  +            last_e = e;
               if (APR_BUCKET_IS_EOS(e) || APR_BUCKET_IS_FLUSH(e)) {
                   break;
               }
  @@ -3166,13 +3171,13 @@
            *       with the hope of concatenating with another response)
            */
           if ((!fd && !more && 
  -            (nbytes + flen < AP_MIN_BYTES_TO_WRITE) && !APR_BUCKET_IS_FLUSH(e))
  -            || (nbytes + flen < AP_MIN_BYTES_TO_WRITE && APR_BUCKET_IS_EOS(e) && c->keepalive)) {
  +            (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)) {
               /* NEVER save an EOS in here.  If we are saving a brigade with 
                * an EOS bucket, then we are doing keepalive connections, and 
                * we want to process to second request fully.
                */
  -            if (APR_BUCKET_IS_EOS(e)) {
  +            if (APR_BUCKET_IS_EOS(last_e)) {
                   apr_bucket *bucket = NULL;
                   /* If we are in here, then this request is a keepalive.  We
                    * need to be certain that any data in a bucket is valid