Fwd: Question about slab allocator

Shuxin Yang shuxinyang.oss at gmail.com
Wed May 7 19:42:39 UTC 2014

Sorry for sending my previous mail to wrong list. My co-worker told me this
list is the right place to be.

Again, profuse thanks in advance!

-------- Original Message --------
Subject: 	Question about slab allocator
Date: 	Wed, 07 May 2014 12:38:00 -0700
From: 	Shuxin Yang <shuxinyang.oss at gmail.com>
To: 	nginx at nginx.org <nginx at nginx.org>


    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
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) {
     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
  the condition at line 514 is always true, and hence we never get
chance to
  free the empty page.

   512             page->slab &= ~m;
   514             if (page->slab) {
   515                 goto done;
   516             }
   518             ngx_slab_free_pages(pool, page, 1);


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20140507/fe72441d/attachment.html>

More information about the nginx-devel mailing list