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;