Linux/SPARC malloc() returns an address aligned to 8. This conflicts with
our SPARC 16-byte alignment and some allocations may be done out of pool.
ngx_memalign(ngx_pagesize) fixes this issue.
diff --git a/src/core/nginx.c b/src/core/nginx.c
index ff7a9f8..eaae62e 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -280,6 +280,9 @@
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;
diff --git a/src/core/ngx_palloc.c b/src/core/ngx_palloc.c
index fd04768..ca59f62 100644
--- a/src/core/ngx_palloc.c
+++ b/src/core/ngx_palloc.c
@@ -17,7 +17,7 @@
{
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 @@
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_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;
}