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