On Wed, 2001-11-21 at 10:25, [EMAIL PROTECTED] wrote:
> rbb 01/11/21 10:25:40
>
> Modified: modules/generators config5.m4
> server core.c
hey Ryan
you forgot to add test_pass_brigade.c
to CVS
> 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;
>
>
>
--
Ian Holsman [EMAIL PROTECTED]
Performance Measurement & Analysis
CNET Networks - (415) 344-2608