memory leak at ngx_pool_cleanup_add ?

Maxim Dounin mdounin at mdounin.ru
Tue Oct 12 21:17:35 MSD 2010


Hello!

On Tue, Oct 12, 2010 at 08:59:13PM +0400, Franchoze Eric wrote:

> 
> 
> 12.10.10, 01:45, "Franchoze Eric" <franchoze at yandex.ru>:
> 
> > Is free() needed here?
> >  
> >  ngx_pool_cleanup_t *
> >  ngx_pool_cleanup_add(ngx_pool_t *p, size_t size)
> >  {
> >      ngx_pool_cleanup_t  *c;
> >  
> >      c = ngx_palloc(p, sizeof(ngx_pool_cleanup_t));
> >      if (c == NULL) {
> >          return NULL;
> >      }
> >  
> >      if (size) {
> >          c->data = ngx_palloc(p, size);
> >          !!! do we need nginx_free(p); here?!!!!
> >  
> >          if (c->data == NULL) {
> >              return NULL;
> >          }
> >  
> 
> Opps, I mean nginx_free(c) of cource. It is allocated in lines 
> above and if c->data is not allotated it just returns from 
> function without freeing c.

The answer is still the same: no.

It's pool allocator, and all memory is freed on pool destruction 
(which is expected to follow allocation error shortly).

Additionally, in nginx's pool allocator only large memory blocks 
may be freed individually (though it's still not required), 
freeing small allocations aren't supported at all.

Maxim Dounin



More information about the nginx-devel mailing list