Thanks. The patch is committed to both php4 and php5.

Edin


On Friday 25 June 2004 13:39, Joe Orton wrote:
> [resend, see followup to old thread for patch to HEAD]
>
> It's simpler to just use the ap_r* interfaces in the the handler SAPI
> for 2.0, this improves network usage by allowing httpd to buffer as
> necessary, and fixes a bug where ub_write is unnecessarily pmemdup'ing
> the string (it could have used a transient bucket to avoid that; the
> apache2filter got this right), and stops re-using an output brigade
> which is now or at least will soon be a 2.0 API violation.
>
> (this restores constant memory use for an arbitrary length response)
>
> --- php-4.3.7/sapi/apache2handler/sapi_apache2.c.handler
> +++ php-4.3.7/sapi/apache2handler/sapi_apache2.c
> @@ -67,30 +67,15 @@
>  static int
>  php_apache_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
>  {
> -     apr_bucket *bucket;
> -     apr_bucket_brigade *brigade;
>       request_rec *r;
>       php_struct *ctx;
> -     char *copy_str;
> -
> -     if (str_length == 0) {
> -             return 0;
> -     }
>
>       ctx = SG(server_context);
>       r = ctx->r;
> -     brigade = ctx->brigade;
>
> -     copy_str = apr_pmemdup( r->pool, str, str_length);
> -     bucket = apr_bucket_pool_create(copy_str, str_length, r->pool,
> r->connection->bucket_alloc); -
> -     APR_BRIGADE_INSERT_TAIL(brigade, bucket);
> -
> -     if (ap_pass_brigade(r->output_filters, brigade) != APR_SUCCESS ||
> r->connection->aborted) { +   if (ap_rwrite(str, str_length, r) < 0) {
>               php_handle_aborted_connection();
>       }
> -     /* Ensure this brigade is empty for the next usage. */
> -     apr_brigade_cleanup(brigade);
>
>       return str_length; /* we always consume all the data passed to us. */
>  }
> @@ -245,8 +230,6 @@
>  php_apache_sapi_flush(void *server_context)
>  {
>       php_struct *ctx;
> -     apr_bucket_brigade *brigade;
> -     apr_bucket *bucket;
>       request_rec *r;
>       TSRMLS_FETCH();
>
> @@ -259,20 +242,15 @@
>       }
>
>       r = ctx->r;
> -     brigade = ctx->brigade;
>
>       sapi_send_headers(TSRMLS_C);
>
>       r->status = SG(sapi_headers).http_response_code;
>       SG(headers_sent) = 1;
>
> -     /* Send a flush bucket down the filter chain. */
> -     bucket = apr_bucket_flush_create(r->connection->bucket_alloc);
> -     APR_BRIGADE_INSERT_TAIL(brigade, bucket);
> -     if (ap_pass_brigade(r->output_filters, brigade) != APR_SUCCESS ||
> r->connection->aborted) { +   if (ap_rflush(r) < 0 || r->connection->aborted)
> {
>               php_handle_aborted_connection();
>       }
> -     apr_brigade_cleanup(brigade);
>  }
>
>  static void php_apache_sapi_log_message(char *msg)
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to