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;