]> git.kaiwu.me - nginx.git/commitdiff
Linux/SPARC malloc() returns an address aligned to 8. This conflicts with
authorIgor Sysoev <igor@sysoev.ru>
Wed, 30 Sep 2009 12:56:44 +0000 (12:56 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 30 Sep 2009 12:56:44 +0000 (12:56 +0000)
our SPARC 16-byte alignment and some allocations may be done out of pool.
ngx_memalign(ngx_pagesize) fixes this issue.

src/core/nginx.c
src/core/ngx_palloc.c

index ff7a9f8485a7cb1b40c094f78b1df5fc4345d622..eaae62e4bbe459c2addb053dc78471d876e5507e 100644 (file)
@@ -280,6 +280,9 @@ 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 fd0476803c911d314cdc0b720cd02ac6a3bbdc07..ca59f6260411710694c1bde36df6e5b678dce819 100644 (file)
@@ -17,7 +17,7 @@ ngx_create_pool(size_t size, ngx_log_t *log)
 {
     ngx_pool_t  *p;
 
-    p = ngx_alloc(size, log);
+    p = ngx_memalign(ngx_pagesize, 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_alloc(psize, pool->log);
+    m = ngx_memalign(ngx_pagesize, psize, pool->log);
     if (m == NULL) {
         return NULL;
     }
@@ -219,7 +219,7 @@ ngx_palloc_large(ngx_pool_t *pool, size_t size)
     ngx_uint_t         n;
     ngx_pool_large_t  *large;
 
-    p = ngx_alloc(size, pool->log);
+    p = ngx_memalign(ngx_pagesize, size, pool->log);
     if (p == NULL) {
         return NULL;
     }