httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r..@apache.org
Subject cvs commit: httpd-2.0/server core.c
Date Wed, 21 Nov 2001 18:25:40 GMT
rbb         01/11/21 10:25:40

  Modified:    modules/generators config5.m4
               server   core.c
  Log:
  Fix a bug in our output filter buffering.  If a lot of small brigades are
  sent, the core will send the first 16 buckets, regardless of how much
  data there is.  In the pathological case, this can cause a lot of 16
  byte packets.  Now, if we see less than AP_MIN_BYTES, we combine
  all of the buckets into a single bucket to be sent in a later packet.
  
  This can cause a lot of memory copies, but it eases our network traffic.
  
  Revision  Changes    Path
  1.10      +1 -0      httpd-2.0/modules/generators/config5.m4
  
  Index: config5.m4
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/generators/config5.m4,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- config5.m4	2001/11/19 18:07:27	1.9
  +++ config5.m4	2001/11/21 18:25:40	1.10
  @@ -8,6 +8,7 @@
   APACHE_MODULE(autoindex, directory listing, , , yes)
   APACHE_MODULE(asis, as-is filetypes, , , yes)
   APACHE_MODULE(info, server information, , , most)
  +APACHE_MODULE(test_pass_brigade, TEST, , , most)
   APACHE_MODULE(suexec, set uid and gid for spawned processes, , , no, [
                 other_targets=suexec ] )
   
  
  
  
  1.102     +20 -3     httpd-2.0/server/core.c
  
  Index: core.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/core.c,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- core.c	2001/11/21 03:46:22	1.101
  +++ core.c	2001/11/21 18:25:40	1.102
  @@ -3079,9 +3079,26 @@
                   if (n) {
                       if (!fd) {
                           if (nvec == MAX_IOVEC_TO_WRITE) {
  -                            /* woah! too many. stop now. */
  -                            more = apr_brigade_split(b, e);
  -                            break;
  +                            /* woah! too many. buffer them up, for use later. */
  +                            apr_bucket *temp;
  +                            apr_bucket_brigade *temp_brig;
  +
  +                            temp_brig = apr_brigade_create(f->c->pool);
  +                            temp = APR_BRIGADE_FIRST(b);
  +                            while (temp != e) {
  +                                apr_bucket *d;
  +                                rv = apr_bucket_read(e, &str, &n, APR_BLOCK_READ);
  +                                apr_brigade_write(temp_brig, NULL, NULL, str, n);
  +                                d = temp;
  +                                temp = APR_BUCKET_NEXT(temp);
  +                                apr_bucket_delete(d);
  +                            }
  +                            temp = APR_BRIGADE_FIRST(temp_brig);
  +                            APR_BUCKET_REMOVE(temp);
  +                            APR_BRIGADE_INSERT_HEAD(b, temp);
  +                            apr_brigade_destroy(temp_brig);
  +                            e = temp;
  +                            nvec = 0;
                           }
                           vec[nvec].iov_base = (char*) str;
                           vec[nvec].iov_len = n;
  
  
  

Mime
View raw message