Mercurial > hg > nginx
comparison src/core/ngx_slab.c @ 881:5ed08a4c3bd3
fix building on 64-bit platforms
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 27 Nov 2006 20:47:55 +0000 |
parents | 201d017ea470 |
children | 715336c243e1 |
comparison
equal
deleted
inserted
replaced
880:3b763d36e055 | 881:5ed08a4c3bd3 |
---|---|
147 | 147 |
148 void * | 148 void * |
149 ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size) | 149 ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size) |
150 { | 150 { |
151 size_t s; | 151 size_t s; |
152 uintptr_t p, mask, *bitmap; | 152 uintptr_t p, n, m, mask, *bitmap; |
153 ngx_uint_t i, n, m, slot, shift, map; | 153 ngx_uint_t i, slot, shift, map; |
154 ngx_slab_page_t *page, *prev, *slots; | 154 ngx_slab_page_t *page, *prev, *slots; |
155 | 155 |
156 ngx_shmtx_lock(&pool->mutex); | 156 ngx_shmtx_lock(&pool->mutex); |
157 | 157 |
158 if (size >= ngx_slab_max_size) { | 158 if (size >= ngx_slab_max_size) { |
285 mask = n << NGX_SLAB_MAP_SHIFT; | 285 mask = n << NGX_SLAB_MAP_SHIFT; |
286 | 286 |
287 do { | 287 do { |
288 if ((page->slab & NGX_SLAB_MAP_MASK) != mask) { | 288 if ((page->slab & NGX_SLAB_MAP_MASK) != mask) { |
289 | 289 |
290 for (m = 1 << NGX_SLAB_MAP_SHIFT, i = 0; | 290 for (m = (uintptr_t) 1 << NGX_SLAB_MAP_SHIFT, i = 0; |
291 m & mask; | 291 m & mask; |
292 m <<= 1, i++) | 292 m <<= 1, i++) |
293 { | 293 { |
294 if ((page->slab & m)) { | 294 if ((page->slab & m)) { |
295 continue; | 295 continue; |
367 | 367 |
368 goto done; | 368 goto done; |
369 | 369 |
370 } else { /* size < ngx_pagesize */ | 370 } else { /* size < ngx_pagesize */ |
371 | 371 |
372 page->slab = (1 << NGX_SLAB_MAP_SHIFT) | shift; | 372 page->slab = ((uintptr_t) 1 << NGX_SLAB_MAP_SHIFT) | shift; |
373 page->next = &slots[slot]; | 373 page->next = &slots[slot]; |
374 page->prev = (uintptr_t) &slots[slot] | NGX_SLAB_BIG; | 374 page->prev = (uintptr_t) &slots[slot] | NGX_SLAB_BIG; |
375 | 375 |
376 slots[slot].next = page; | 376 slots[slot].next = page; |
377 | 377 |