On Fri, 16 Nov 2001, Greg Stein wrote:
> > around the reference count. The lock API requires that we create the
> > lock from a pool, but there isn't a really suitable pool from which
> > to allocate the lock, given that its lifetime isn't necessarily tied
> > to that of a request or connection.
>
> The "suitable pool" is that of the apr_mmap_t itself. Note that the file
> cache would be putting that lock into its own long-lived pool.
>
> Not so hard, or I'm missing something :-)
You're missing something. :-)
Let's say you have a pool hierarchy like this:
a
/ \
b c
/
d
You have an apr_mmap_t allocated out of c. You request to dup the mmap
into b. Will b live longer than c? No way to know. Will c live longer
than b? No way to know. So if you've allocated your refcount or the lock
on that refcount out of c, and c goes away before b does, then b has a
reference to no-longer-existing memory.
This is not an odd situation: it's almost exactly what's happening in
mod_file_cache right now. c is the cmd->pool. b is the c->pool. d is
the r->pool. (There might be some pools between a and b for the diagram
to be exactly right, but the hierarchy is essentially correct I believe.)
Granted, in that particular example, c lives much, much longer than b, but
in general that's not at all guaranteed to be the case.
--Cliff
--------------------------------------------------------------
Cliff Woolley
[EMAIL PROTECTED]
Charlottesville, VA