]> granicus.if.org Git - php/commitdiff
Fix a problem where php-generated data was pushed down the entire output
authorAaron Bannert <aaron@php.net>
Thu, 11 Apr 2002 20:34:56 +0000 (20:34 +0000)
committerAaron Bannert <aaron@php.net>
Thu, 11 Apr 2002 20:34:56 +0000 (20:34 +0000)
filter chain instead of just down the rest of the chain. This fix will
speed up some unnecessary overhead introduced in the last patch.

Suggested by:  Cliff Woolley <jwoolley@apache.org>

sapi/apache2filter/php_apache.h
sapi/apache2filter/sapi_apache2.c

index cc60ad22931a6830337d1a594b64b0c6570bce8e..8cac0a0e37fa24a7322de7fbd62b6d01196a3771 100644 (file)
@@ -22,6 +22,7 @@
 typedef struct php_struct {
        int state;
        request_rec *r;
+       ap_filter_t *f; /* downstream output filters after the PHP filter. */
        /* Length of post_data buffer */
        int post_len;
        /* Index for reading from buffer */
index 6b44c7ec1d57bbf48217b06345045bf5570d71a2..986de019f2de6cd4b1d321b80296a9459840d533 100644 (file)
@@ -49,11 +49,11 @@ php_apache_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
        apr_bucket *b;
        apr_bucket_brigade *bb;
        apr_bucket_alloc_t *ba;
-       ap_filter_t *f; /* output filters */
+       ap_filter_t *f; /* remaining output filters */
        php_struct *ctx;
 
        ctx = SG(server_context);
-       f = ctx->r->output_filters;
+       f = ctx->f;
 
        if (str_length == 0) return 0;
        
@@ -183,7 +183,7 @@ php_apache_sapi_flush(void *server_context)
        if (!server_context)
                return;
     
-       f = ctx->r->output_filters;
+       f = ctx->f;
 
        /* Send a flush bucket down the filter chain. The current default
         * handler seems to act on the first flush bucket, but ignores
@@ -344,6 +344,7 @@ static int php_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
        ap_add_cgi_vars(f->r);
 
        ctx = SG(server_context);
+       ctx->f = f; /* safe whatever filters are after us in the chain. */
        if (ctx == NULL) {
                ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, f->r,
                                         "php failed to get server context");