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); }