]> granicus.if.org Git - apache/commitdiff
The core filter should not be using its own brigade inside its own ctx
authorRyan Bloom <rbb@apache.org>
Sat, 7 Oct 2000 18:10:02 +0000 (18:10 +0000)
committerRyan Bloom <rbb@apache.org>
Sat, 7 Oct 2000 18:10:02 +0000 (18:10 +0000)
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

include/httpd.h
modules/http/http_core.c

index c2c2d21bf94924cf36bb15f5a8a4d5398472715b..b0faabc9dedb16599e386145609048c20f291236 100644 (file)
@@ -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... */
index a6f1ffd429511e1f1ca4c42acd7dd2831db142ef..f9169243edfc5a39868b6e88ef9f06eb974294a2 100644 (file)
@@ -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) {