You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Greg Stein <gs...@lyra.org> on 2000/12/01 02:36:53 UTC
Re: apr_palloc(NULL...)
Hrm. We can't create a subpool for each and every file. Each subpool costs a
minimum of 8k of memory. Using a subpool for just the NULL-pool files will
add complexity and only solve NULL-pools for the file case; I'd hate to see
that complexity ripple through all of the types to deal with a feature that
we aren't sure about anyways.
I'd say that we toss the NULL pool feature.
Your fix for the permanent_pool is dead-on, however. I didn't realize that
problem had existed(!).
Regarding the multiple types of allocs... weren't we going to do that by
configuring a pool a bit differently? (e.g. have an explicit "malloc-style
pool" rather than using p==NULL to signify that)
Cheers,
-g
On Mon, Nov 27, 2000 at 06:52:30PM -0800, rbb@covalent.net wrote:
>
> Just spoke to Will Rowe, and we have a potentially cleaner
> solution. Basically, we fix the make_sub_pool function so that if we call
> it twice with a NULL pool, we just assign the second root pool to be a
> child of the permanent_pool. This keeps us from blowing away the
> permanent pool, which is goodness.
>
> This also allows us to create a new root pool whenever we call
> apr_p(c)alloc with a NULL pool. So, basically, we would do this if we
> called apr_open with a NULL pool:
>
> apr_open(&fd,..... NULL);
> fd->cntxt = apr_make_pool(NULL, ...);
> ....
>
> apr_close(fd)
> ap_destroy_pool(fd..)
>
> This will require a flag to determine if we created the pool or not, but
> that is a minimal addition.
>
> Ryan
>
>
> On Mon, 27 Nov 2000 rbb@covalent.net wrote:
>
> >
> > One of the early hacks that was added to APR was the ability to call
> > apr_p(c)alloc with a NULL pool. This would make apr_p(c)alloc use malloc
> > internally to allocate the memory. I would like to remove this feature,
> > but it has some far-reaching implications if I do, so I am checking here
> > first.
> >
> > The problem is that the support for NULL pools has always been a bit
> > half-assed, and it is very difficult to get it right. We really need a
> > more generalized set of memory routines that would allow people to
> > allocate from a pool, the heap, or shared memory.
> >
> > I started to go through the APR code today to cleanup the NULL pool stuff,
> > and it is non-trivial. Think about it this way, we use pools for a lot
> > more than just allocating memory, we also use pools for cleaning up after
> > ourselves. As things stand right now, we have some serious memory leaks
> > in APR, because we allow people to allocate out of a NULL pool.
> >
> > For example:
> >
> > apr_open is called with a NULL pool, and the APR_BUFFERED flag, we will
> > allocate 4k on a unix machine for the buffer, that is never freed.
> >
> > Even if we go through and manually free all of the allocated memory if the
> > pool is NULL, we still have the problem that we can't register cleanups,
> > so we are forcing people to manually destroy whatever variables they
> > create.
> >
> > Can we get a quick (like within 24 hrs) decision on which direction we
> > want to go with this. I plan to make the change quickly, either cleaning
> > up the memory leaks by manually freeing them, or removing the NULL pool
> > hack.
> >
> > Ryan
> >
> >
> > _______________________________________________________________________________
> > Ryan Bloom rbb@apache.org
> > 406 29th St.
> > San Francisco, CA 94131
> > -------------------------------------------------------------------------------
> >
> >
> >
> >
> >
>
>
> _______________________________________________________________________________
> Ryan Bloom rbb@apache.org
> 406 29th St.
> San Francisco, CA 94131
> -------------------------------------------------------------------------------
>
>
--
Greg Stein, http://www.lyra.org/