On Tue, 27 Feb 2001, Cliff Woolley wrote:
> On Mon, 26 Feb 2001 [EMAIL PROTECTED] wrote:
>
> > > 3) pool_bucket_cleanup() is completely bogus AFAICT. I've added this
> > > comment to the code, which describes the problems pretty well:
> > > 4) The same problem applies to file buckets that have been split/copied
> > > when APR_HAS_MMAP: when one of them gets read it gets made into an MMAP.
> > > ALL of the file buckets should be converted at the same time to reference
> > > the same MMAP.
> >
> > I disagree about how to fix this. The simple solution is to just abstract
> > on level, such as:
> >
> > bucket -> bucket -> bucket
> > | | |
> > shared shared shared
> > | | |
> > -----------------------------
> > |
> > pool_bucket
>
> So is what you're saying that struct apr_bucket should be a member of TWO
> rings... one brigade as usual plus one ring ("brigade") of siblings
> buckets that point to the same resource? I'd thought of that, but didn't
> think anyone would buy it. I'm fine with the idea. But I *must* be
> missing something... how does that keep us from traversing a list of
> buckets when we convert types? (PS: Remember that the "shared" level is
> going away.) If I've missed your point, please elaborate.
No, we don't want two rings. It is just one level of abstraction.
Basically, when creating a pool bucket, you have one instance of the data,
and three small layers that sit on top of it. Now, when you want to
change from a pool bucket to a heap bucket, you just have to change the
bottom layer. To change the type pointer, make the type in the top-most
bucket point to a pointer in the bottom most bucket. That should solve
the problem rather cleanly.
Ryan
_______________________________________________________________________________
Ryan Bloom [EMAIL PROTECTED]
406 29th St.
San Francisco, CA 94131
-------------------------------------------------------------------------------