Question about slab allocator

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 [email protected]
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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs