From: Ryan Bloom Date: Sat, 7 Oct 2000 18:10:02 +0000 (+0000) Subject: The core filter should not be using its own brigade inside its own ctx X-Git-Tag: APACHE_2_0_ALPHA_7~22 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=360f36a96b101af365061d567f2372160fb13a81;p=apache The core filter should not be using its own brigade inside its own ctx structure. This changes the core_output_filter to use a brigade inside the conn_rec. Think of this as analagous to the BUFF in the conn_rec. The idea is that if we have pipelined requests, and it isn't worth it to send the last bit of data from the first request, we want to save that extra bit of data to the conn_rec, so that the next request sends it automatically. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@86433 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/httpd.h b/include/httpd.h index c2c2d21bf9..b0faabc9de 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -887,9 +887,11 @@ struct conn_rec { /** A list of output filters to be used for this connection * @defvar ap_filter_t *filters */ struct ap_filter_t *output_filters; + /** Location to store data about to be written to the client. + * @defvar ap_bucket_brigade *client_data */ + struct ap_bucket_brigade *client_data; /** bytes left to read in the current request body */ long remaining; - }; /* Per-vhost config... */ diff --git a/modules/http/http_core.c b/modules/http/http_core.c index a6f1ffd429..f9169243ed 100644 --- a/modules/http/http_core.c +++ b/modules/http/http_core.c @@ -3293,9 +3293,6 @@ static int core_input_filter(ap_filter_t *f, ap_bucket_brigade *b) * is to send the headers if they haven't already been sent, and then send * the actual data. */ -typedef struct CORE_OUTPUT_FILTER_CTX { - ap_bucket_brigade *b; -} core_output_filter_ctx_t; #define MAX_IOVEC_TO_WRITE 16 static int core_output_filter(ap_filter_t *f, ap_bucket_brigade *b) { @@ -3304,7 +3301,6 @@ static int core_output_filter(ap_filter_t *f, ap_bucket_brigade *b) apr_ssize_t bytes_sent = 0, nbytes = 0; ap_bucket *e; conn_rec *c = f->c; - core_output_filter_ctx_t *ctx = f->ctx; apr_ssize_t nvec = 0; apr_ssize_t nvec_trailers= 0; @@ -3315,14 +3311,11 @@ static int core_output_filter(ap_filter_t *f, ap_bucket_brigade *b) apr_ssize_t flen = 0; apr_off_t foffset = 0; - if (ctx == NULL) { - f->ctx = ctx = apr_pcalloc(c->pool, sizeof(core_output_filter_ctx_t)); - } /* If we have a saved brigade, concatenate the new brigade to it */ - if (ctx->b) { - AP_BRIGADE_CONCAT(ctx->b, b); - b = ctx->b; - ctx->b = NULL; + if (c->client_data) { + AP_BRIGADE_CONCAT(c->client_data, b); + b = c->client_data; + c->client_data = NULL; } /* Hijack any bytes in BUFF and prepend it to the brigade. */ @@ -3379,7 +3372,7 @@ static int core_output_filter(ap_filter_t *f, ap_bucket_brigade *b) * buffer the brigade or send the brigade out on the network */ if (!fd && (!more) && (nbytes < MIN_SIZE_TO_WRITE) && (e->type != AP_BUCKET_EOS)) { - ap_save_brigade(f, &ctx->b, &b); + ap_save_brigade(f, &c->client_data, &b); return APR_SUCCESS; } if (fd) {