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

_______________________________________________
nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to