You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Stefan Fritsch <sf...@sfritsch.de> on 2010/02/18 00:02:16 UTC

Finding memory leaks in brigade usage

On Wednesday 17 February 2010, Jeff Trawick wrote:
> > What about adding some code to apr-util's bucket debugging that
> > logs when destroyed brigades (i.e. where the pool cleanup has
> > been removed) are reused? I think this may be a common cause for
> > memory leaks.
> 
> as in something like this?
> 
>   apr_brigade_destroy(foo->bb)
>   ...
>   if (!foo->bb) {
>     foo->bb = apr_brigade_create();
>   }
>   ...
>   APR_BRIGADE_INSERT_TAIL(foo->bb, b);
>   /* no automatic cleanup of b */

Exactly.

> > A simpler alternative would be to set bb->pool and
> > bb->bucket_alloc to NULL in apr_brigade_destroy(). The latter
> > could maybe even be enabled in some apr-util maintainer mode
> > (just like httpd enables some debugging in maintainer mode).
> 
> APR_BRIGADE_CHECK_CONSISTENCY() would presumably be changed to
>  abort if !bb->pool

True, but that would only be triggered if brigade debugging is 
enabled. I was hoping to also get something more light-weight. But I 
now see that setting pool and bucket_alloc to NULL won't trigger 
segfaults when buckets are just moved from one brigade to another. 
Maybe it's not worth the effort without full APR_BUCKET_DEBUG.