On Thu, Apr 11, 2002 at 01:43:35PM +1000, Brian Havard wrote:
> >Index: sapi/apache2filter/sapi_apache2.c
> >===================================================================
> >RCS file: /repository/php4/sapi/apache2filter/sapi_apache2.c,v
> >retrieving revision 1.61.2.1
> >diff -u -u -r1.61.2.1 sapi_apache2.c
> >--- sapi/apache2filter/sapi_apache2.c        14 Mar 2002 10:57:00 -0000      
>1.61.2.1
> >+++ sapi/apache2filter/sapi_apache2.c        10 Apr 2002 20:36:27 -0000
> >@@ -48,26 +48,31 @@
> > {
> >     apr_bucket *b;
> >     apr_bucket_brigade *bb;
> >+    apr_bucket_alloc_t *ba;
> >     php_struct *ctx;
> >-    uint now;
> > 
> >     ctx = SG(server_context);
> > 
> >     if (str_length == 0) return 0;
> >     
> >-    bb = apr_brigade_create(ctx->f->r->pool);
> >-    while (str_length > 0) {
> >-            now = MIN(str_length, 4096);
> >-            b = apr_bucket_transient_create(str, now);
> >-            APR_BRIGADE_INSERT_TAIL(bb, b);
> >-            str += now;
> >-            str_length -= now;
> >-    }
> >+    ba = ctx->f->c->bucket_alloc;
> >+    bb = apr_brigade_create(ctx->f->r->pool, ba);
> >+
> >+    b = apr_bucket_transient_create(str, str_length, ba);
> >+    APR_BRIGADE_INSERT_TAIL(bb, b);
> >+
> >+    /* Add a Flush bucket to the end of this brigade, so that
> >+     * the transient buckets above are more likely to make it out
> >+     * the end of the filter instead of having to be copied into
> >+     * someone's setaside. */
> >+    b = apr_bucket_flush_create(ba);
> >+    APR_BRIGADE_INSERT_TAIL(bb, b);
> >+
> >     if (ap_pass_brigade(ctx->f->next, bb) != APR_SUCCESS) {
> >             php_handle_aborted_connection();
> >     }
> >     
> >-    return str_length;
> >+    return 0; /* we wrote everything, we promise! */
> 
> Why did you change this to return 0? It breaks ImageJpeg
> (and likely other things) as GD checks that the return value
> matches the passed length & aborts if it doesn't.
> 
> Otherwise, this patch seems to work much better than the HEAD
> code.

It seems to me that it returns any remaining data, not how much was
written. In the old code there was no way that it would ever return
non-zero, so I decided to make it explicit. Did I interpret the
wb_write function incorrectly?

-aaron

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

Reply via email to