Question about slab allocator
Shuxin Yang
shuxinyang.oss at gmail.com
Wed May 7 19:38:00 UTC 2014
Hi,
I'm nginx newbie. I'm reading src/core/ngx_slab.c, and am confused
as to
the purpose of NGX_SLAB_PAGE_START.
As far as I can understand, when allocating a block, the most
significant
bit (MSB) of first page's corresponding ngx_slab_page_s::slab is set "1".
as we can see from :
cat -n ngx_slab.c at pristine-1.7-release
644 page->slab = pages | NGX_SLAB_PAGE_START;
However, the MSB of is cleared later on:
362 } else if (shift == ngx_slab_exact_shift) {
363
364 page->slab = 1;
So, what is the purpose of NGX_SLAB_PAGE_START (i.e the MSB of the
field slab)?
If we really meant to keep the MSB, I guess there is another bug over
here:
the condition at line 514 is always true, and hence we never get
chance to
free the empty page.
512 page->slab &= ~m;
513
514 if (page->slab) {
515 goto done;
516 }
517
518 ngx_slab_free_pages(pool, page, 1);
Thanks
Shuxin
More information about the nginx
mailing list