On 10/19/2005 08:25 PM, William A. Rowe, Jr. wrote:
[..cut..]
>
> Ruediger - I'm questioning if it's the BRIGADE_CONCAT, or actually if we
> are
> failing to respect transient buckets in the core / ssl filters. If we are
> failing to pay attention to transient buckets (or not allocating the
> buckets
> as transient when, in fact, they are) then this might be the root bug.
Agreed. The question is what we can expect from the core / ssl filters (Is
there any kind of contract defined?). This defines if it is a bug in
core / ssl or in the proxy code.
So I guess the solution is either to handle transient buckets carefully later
by setting
them aside in this situation, as the current patches do or to adjust the
core / ssl filters in a way that they do not deliver transient buckets any
longer.
The attached quick and dirty patch following this way seems to solve the
problem too,
but
- I am not sure about its sideeffects.
- There are further places in the SSL code where transient buckets get used.
They
would need to checked as well.
BTW: The problem does not happen without SSL because in this case we get heap
buckets
(checked with gdb, but not in the code).
>
> Researching as well.
>
Regards
RĂ¼diger
Index: modules/ssl/ssl_engine_io.c
===================================================================
--- modules/ssl/ssl_engine_io.c (Revision 326481)
+++ modules/ssl/ssl_engine_io.c (Arbeitskopie)
@@ -1324,7 +1324,7 @@
/* Create a transient bucket out of the decrypted data. */
if (len > 0) {
apr_bucket *bucket =
- apr_bucket_transient_create(inctx->buffer, len,
f->c->bucket_alloc);
+ apr_bucket_heap_create(inctx->buffer, len, NULL,
f->c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(bb, bucket);
}