Mercurial > hg > nginx
comparison src/core/ngx_palloc.c @ 3177:adc4fc0c3cc3
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.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 30 Sep 2009 12:56:44 +0000 |
parents | cb7d05c097db |
children | c16e1213bf96 |
comparison
equal
deleted
inserted
replaced
3176:60bc5cc68d3b | 3177:adc4fc0c3cc3 |
---|---|
15 ngx_pool_t * | 15 ngx_pool_t * |
16 ngx_create_pool(size_t size, ngx_log_t *log) | 16 ngx_create_pool(size_t size, ngx_log_t *log) |
17 { | 17 { |
18 ngx_pool_t *p; | 18 ngx_pool_t *p; |
19 | 19 |
20 p = ngx_alloc(size, log); | 20 p = ngx_memalign(ngx_pagesize, size, log); |
21 if (p == NULL) { | 21 if (p == NULL) { |
22 return NULL; | 22 return NULL; |
23 } | 23 } |
24 | 24 |
25 p->d.last = (u_char *) p + sizeof(ngx_pool_t); | 25 p->d.last = (u_char *) p + sizeof(ngx_pool_t); |
179 size_t psize; | 179 size_t psize; |
180 ngx_pool_t *p, *new, *current; | 180 ngx_pool_t *p, *new, *current; |
181 | 181 |
182 psize = (size_t) (pool->d.end - (u_char *) pool); | 182 psize = (size_t) (pool->d.end - (u_char *) pool); |
183 | 183 |
184 m = ngx_alloc(psize, pool->log); | 184 m = ngx_memalign(ngx_pagesize, psize, pool->log); |
185 if (m == NULL) { | 185 if (m == NULL) { |
186 return NULL; | 186 return NULL; |
187 } | 187 } |
188 | 188 |
189 new = (ngx_pool_t *) m; | 189 new = (ngx_pool_t *) m; |
217 { | 217 { |
218 void *p; | 218 void *p; |
219 ngx_uint_t n; | 219 ngx_uint_t n; |
220 ngx_pool_large_t *large; | 220 ngx_pool_large_t *large; |
221 | 221 |
222 p = ngx_alloc(size, pool->log); | 222 p = ngx_memalign(ngx_pagesize, size, pool->log); |
223 if (p == NULL) { | 223 if (p == NULL) { |
224 return NULL; | 224 return NULL; |
225 } | 225 } |
226 | 226 |
227 n = 0; | 227 n = 0; |