Mercurial > hg > nginx
diff src/core/ngx_alloc.c @ 156:afc333135a6b
nginx-0.0.1-2003-10-23-10:13:16 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 23 Oct 2003 06:13:16 +0000 |
parents | b27548f540ad |
children | 2357fa41738a |
line wrap: on
line diff
--- a/src/core/ngx_alloc.c +++ b/src/core/ngx_alloc.c @@ -20,6 +20,7 @@ void *ngx_alloc(size_t size, ngx_log_t * return p; } + void *ngx_calloc(size_t size, ngx_log_t *log) { void *p; @@ -32,6 +33,7 @@ void *ngx_calloc(size_t size, ngx_log_t return p; } + ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log) { ngx_pool_t *p; @@ -47,6 +49,7 @@ ngx_pool_t *ngx_create_pool(size_t size, return p; } + void ngx_destroy_pool(ngx_pool_t *pool) { ngx_pool_t *p, *n; @@ -56,7 +59,9 @@ void ngx_destroy_pool(ngx_pool_t *pool) #if (NGX_DEBUG_ALLOC) ngx_log_debug(pool->log, "free: %08x" _ l->alloc); #endif - free(l->alloc); + if (l->alloc) { + free(l->alloc); + } } /* @@ -85,6 +90,7 @@ void ngx_destroy_pool(ngx_pool_t *pool) pool = NULL; } + void *ngx_palloc(ngx_pool_t *pool, size_t size) { char *m; @@ -107,53 +113,71 @@ void *ngx_palloc(ngx_pool_t *pool, size_ } } - /* alloc new pool block */ + /* alloc a new pool block */ + ngx_test_null(n, ngx_create_pool(p->end - (char *) p, p->log), NULL); p->next = n; m = n->last; n->last += size; + return m; + } - /* alloc large block */ - } else { - large = NULL; - last = NULL; + /* alloc a large block */ + + large = NULL; + last = NULL; - if (pool->large) { - for (last = pool->large; /* void */; last = last->next) { - if (last->alloc == NULL) { - large = last; - last = NULL; - break; - } + if (pool->large) { + for (last = pool->large; /* void */; last = last->next) { + if (last->alloc == NULL) { + large = last; + last = NULL; + break; + } - if (last->next == NULL) { - break; - } + if (last->next == NULL) { + break; } } + } - if (large == NULL) { - ngx_test_null(large, ngx_palloc(pool, sizeof(ngx_pool_large_t)), - NULL); - large->next = NULL; - } + if (large == NULL) { + ngx_test_null(large, ngx_palloc(pool, sizeof(ngx_pool_large_t)), NULL); + large->next = NULL; + } + + ngx_test_null(p, ngx_alloc(size, pool->log), NULL); - ngx_test_null(p, ngx_alloc(size, pool->log), NULL); + if (pool->large == NULL) { + pool->large = large; + + } else if (last) { + last->next = large; + } - if (pool->large == NULL) { - pool->large = large; + large->alloc = p; + + return p; +} + - } else if (last) { - last->next = large; - } +void ngx_pfree(ngx_pool_t *pool, void *p) +{ + ngx_pool_large_t *l; - large->alloc = p; - - return p; + for (l = pool->large; l; l = l->next) { + if (p == l->alloc) { +#if (NGX_DEBUG_ALLOC) + ngx_log_debug(pool->log, "free: %08x" _ l->alloc); +#endif + free(l->alloc); + l->alloc = NULL; + } } } + void *ngx_pcalloc(ngx_pool_t *pool, size_t size) { void *p;