Ouch... -1 on this commit, pending further explanation. I'm loathe to see all of that extra code go in there for a dubious performance benefit. Are you *truly* saving any time? I see a while() loop in there copying data. Isn't it almost always faster to let the compiler produce an optimized memcpy() or somesuch?
Brian? Let's see some details/numbers here, or else please revert. Cheers, -g On Sun, May 12, 2002 at 09:45:27PM -0000, [EMAIL PROTECTED] wrote: > brianp 02/05/12 14:45:27 > > Modified: buckets apr_brigade.c > Log: > Optimization for apr_brigade_puts(): skip the strlen computation > in cases where a heap bucket at the end of the brigade has enough > space to hold the string > > Revision Changes Path > 1.39 +25 -0 apr-util/buckets/apr_brigade.c > > Index: apr_brigade.c > =================================================================== > RCS file: /home/cvs/apr-util/buckets/apr_brigade.c,v > retrieving revision 1.38 > retrieving revision 1.39 > diff -u -r1.38 -r1.39 > --- apr_brigade.c 10 Apr 2002 16:44:10 -0000 1.38 > +++ apr_brigade.c 12 May 2002 21:45:27 -0000 1.39 > @@ -452,6 +452,31 @@ > apr_brigade_flush flush, void > *ctx, > const char *str) > { > + apr_bucket *e = APR_BRIGADE_LAST(b); > + if (!APR_BRIGADE_EMPTY(b) && APR_BUCKET_IS_HEAP(e)) { > + /* If there is some space available in a heap bucket > + * at the end of the brigade, start copying the string > + */ > + apr_bucket_heap *h = e->data; > + char *buf = h->base + e->start + e->length; > + apr_size_t bytes_avail = h->alloc_len - e->length; > + const char *s = str; > + > + while (bytes_avail && *s) { > + *buf++ = *s++; > + bytes_avail--; > + } > + e->length += (s - str); > + if (!*s) { > + return APR_SUCCESS; > + } > + str = s; > + } > + > + /* If the string has not been copied completely to the brigade, > + * delegate the remaining work to apr_brigade_write(), which > + * knows how to grow the brigade > + */ > return apr_brigade_write(b, flush, ctx, str, strlen(str)); > } > > > > -- Greg Stein, http://www.lyra.org/