]> git.kaiwu.me - nginx.git/commitdiff
fix r3331:
authorIgor Sysoev <igor@sysoev.ru>
Thu, 17 Dec 2009 12:25:46 +0000 (12:25 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Thu, 17 Dec 2009 12:25:46 +0000 (12:25 +0000)
*) now pools are aligned to 16 bytes
*) forbidden to set non-aligned pool sizes

src/core/nginx.c
src/core/ngx_palloc.c
src/core/ngx_palloc.h
src/http/ngx_http_core_module.c

index 7387aa1baa1fde4ff2339ae288d8f678fcf14597..5df96a4385ed954c83f61756c0f70a77e6b3964d 100644 (file)
@@ -287,9 +287,6 @@ main(int argc, char *const *argv)
     init_cycle.log = log;
     ngx_cycle = &init_cycle;
 
-    /* dummy pagesize to create aligned pool */
-    ngx_pagesize = 1024;
-
     init_cycle.pool = ngx_create_pool(1024, log);
     if (init_cycle.pool == NULL) {
         return 1;
index 7db0d7da463a512227ab1fc533aa8ab47e52143b..35f13119c87a88ea02ac280bc64e9ae77c1aa3fd 100644 (file)
@@ -17,7 +17,7 @@ ngx_create_pool(size_t size, ngx_log_t *log)
 {
     ngx_pool_t  *p;
 
-    p = ngx_memalign(ngx_min(ngx_pagesize, size), size, log);
+    p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
     if (p == NULL) {
         return NULL;
     }
@@ -181,7 +181,7 @@ ngx_palloc_block(ngx_pool_t *pool, size_t size)
 
     psize = (size_t) (pool->d.end - (u_char *) pool);
 
-    m = ngx_memalign(ngx_min(ngx_pagesize, psize), psize, pool->log);
+    m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
     if (m == NULL) {
         return NULL;
     }
index 7706df19c7d3d4f5a62a2d2ab3ce4d9c113ca2f2..6e6612cca7eadb6f7003fefda96d171882a3a0be 100644 (file)
 #define NGX_MAX_ALLOC_FROM_POOL  (ngx_pagesize - 1)
 
 #define NGX_DEFAULT_POOL_SIZE    (16 * 1024)
+
+#define NGX_POOL_ALIGNMENT       16
 #define NGX_MIN_POOL_SIZE                                                     \
-    (sizeof(ngx_pool_t) + 2 * sizeof(ngx_pool_large_t))
+    ngx_align((sizeof(ngx_pool_t) + 2 * sizeof(ngx_pool_large_t)),            \
+              NGX_POOL_ALIGNMENT)
 
 
 typedef void (*ngx_pool_cleanup_pt)(void *data);
index 7de430bc4b6c3a82db0fcf66d494b4151f28a5d6..e05487ee2cdcd53cb57b73a86649e7d916604e35 100644 (file)
@@ -4318,8 +4318,15 @@ ngx_http_core_pool_size(ngx_conf_t *cf, void *post, void *data)
 
     if (*sp < NGX_MIN_POOL_SIZE) {
         ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                           "pool must be no less than %uz", NGX_MIN_POOL_SIZE);
+                           "the pool size must be no less than %uz",
+                           NGX_MIN_POOL_SIZE);
+        return NGX_CONF_ERROR;
+    }
 
+    if (*sp % NGX_POOL_ALIGNMENT) {
+        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                           "the pool size must be a multiple of %uz",
+                           NGX_POOL_ALIGNMENT);
         return NGX_CONF_ERROR;
     }