On Sat, 2 Mar 2002, Brian Pane wrote: > I'm starting to look through the code in detail now, and one > aspect of the API bothers me: > > How is apr_bucket_free() going to figure out which apr_bucket_alloc_t > to return the block to? All it has as input is a pointer to a > bucket, in void* form. Some of the bucket types contain an > apr_bucket_alloc_t*, but not all of them.
apr_bucket_free() knows nothing about buckets, so ignore the fact that a bucket contains an apr_bucket_alloc_t* (see below). The block allocated by apr_bucket_alloc() will have internal information stored immediately prior to (or following?) the location returned from apr_bucket_alloc. In other words, apr_bucket_alloc will over-allocate so that it has a few bytes for its own purposes. You and I had talked about that a while back and agreed that that seemed a reasonable way to handle the problem. The reason for the apr_bucket_alloc_t* in some bucket types is so that apr_bucket_foo_make() can know which allocator to use when the new bucket type needs to allocate storage for private bucket-type-specific structures (eg struct apr_bucket_file). But *all* bucket types should have this pointer... did I miss one? --Cliff -------------------------------------------------------------- Cliff Woolley [EMAIL PROTECTED] Charlottesville, VA
