mirror of
https://github.com/nginx/nginx.git
synced 2025-08-06 14:56:15 +08:00
Slab: simplified allocation from slots.
Removed code that would cause an endless loop, and removed condition check that is always false. The first page in the slot list is guaranteed to satisfy an allocation.
This commit is contained in:
parent
16de9fc3b5
commit
12abb66c41
@ -215,7 +215,6 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
|
||||
if (shift < ngx_slab_exact_shift) {
|
||||
|
||||
do {
|
||||
bitmap = (uintptr_t *) ngx_slab_page_addr(pool, page);
|
||||
|
||||
map = (1 << (ngx_pagesize_shift - shift))
|
||||
@ -259,15 +258,8 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
}
|
||||
}
|
||||
|
||||
page = page->next;
|
||||
|
||||
} while (page);
|
||||
|
||||
} else if (shift == ngx_slab_exact_shift) {
|
||||
|
||||
do {
|
||||
if (page->slab != NGX_SLAB_BUSY) {
|
||||
|
||||
for (m = 1, i = 0; m; m <<= 1, i++) {
|
||||
if (page->slab & m) {
|
||||
continue;
|
||||
@ -288,11 +280,6 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
page = page->next;
|
||||
|
||||
} while (page);
|
||||
|
||||
} else { /* shift > ngx_slab_exact_shift */
|
||||
|
||||
@ -301,9 +288,6 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
n = ((uintptr_t) 1 << n) - 1;
|
||||
mask = n << NGX_SLAB_MAP_SHIFT;
|
||||
|
||||
do {
|
||||
if ((page->slab & NGX_SLAB_MAP_MASK) != mask) {
|
||||
|
||||
for (m = (uintptr_t) 1 << NGX_SLAB_MAP_SHIFT, i = 0;
|
||||
m & mask;
|
||||
m <<= 1, i++)
|
||||
@ -329,10 +313,8 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
}
|
||||
}
|
||||
|
||||
page = page->next;
|
||||
|
||||
} while (page);
|
||||
}
|
||||
ngx_slab_error(pool, NGX_LOG_ALERT, "ngx_slab_alloc(): page is busy");
|
||||
ngx_debug_point();
|
||||
}
|
||||
|
||||
page = ngx_slab_alloc_pages(pool, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user