changeset 6453:12248fe20689

Core: introduced the ngx_palloc_small() function. It deduplicates some code for allocations from memory pool. No functional changes.
author Valentin Bartenev <vbart@nginx.com>
date Wed, 23 Mar 2016 17:44:04 +0300
parents 6be7e59fdd2c
children f61472978419
files src/core/ngx_palloc.c
diffstat 1 files changed, 27 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/ngx_palloc.c
+++ b/src/core/ngx_palloc.c
@@ -9,6 +9,8 @@
 #include <ngx_core.h>
 
 
+static ngx_inline void *ngx_palloc_small(ngx_pool_t *pool, size_t size,
+    ngx_uint_t align);
 static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
 static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
 
@@ -120,27 +122,8 @@ ngx_reset_pool(ngx_pool_t *pool)
 void *
 ngx_palloc(ngx_pool_t *pool, size_t size)
 {
-    u_char      *m;
-    ngx_pool_t  *p;
-
     if (size <= pool->max) {
-
-        p = pool->current;
-
-        do {
-            m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
-
-            if ((size_t) (p->d.end - m) >= size) {
-                p->d.last = m + size;
-
-                return m;
-            }
-
-            p = p->d.next;
-
-        } while (p);
-
-        return ngx_palloc_block(pool, size);
+        return ngx_palloc_small(pool, size, 1);
     }
 
     return ngx_palloc_large(pool, size);
@@ -150,30 +133,40 @@ ngx_palloc(ngx_pool_t *pool, size_t size
 void *
 ngx_pnalloc(ngx_pool_t *pool, size_t size)
 {
+    if (size <= pool->max) {
+        return ngx_palloc_small(pool, size, 0);
+    }
+
+    return ngx_palloc_large(pool, size);
+}
+
+
+static ngx_inline void *
+ngx_palloc_small(ngx_pool_t *pool, size_t size, ngx_uint_t align)
+{
     u_char      *m;
     ngx_pool_t  *p;
 
-    if (size <= pool->max) {
-
-        p = pool->current;
+    p = pool->current;
 
-        do {
-            m = p->d.last;
+    do {
+        m = p->d.last;
 
-            if ((size_t) (p->d.end - m) >= size) {
-                p->d.last = m + size;
+        if (align) {
+            m = ngx_align_ptr(m, NGX_ALIGNMENT);
+        }
 
-                return m;
-            }
+        if ((size_t) (p->d.end - m) >= size) {
+            p->d.last = m + size;
 
-            p = p->d.next;
+            return m;
+        }
 
-        } while (p);
+        p = p->d.next;
 
-        return ngx_palloc_block(pool, size);
-    }
+    } while (p);
 
-    return ngx_palloc_large(pool, size);
+    return ngx_palloc_block(pool, size);
 }