|  | 
 | /* | 
 |  * Copyright (C) Igor Sysoev | 
 |  * Copyright (C) Nginx, Inc. | 
 |  */ | 
 |  | 
 |  | 
 | #ifndef _NGX_SLAB_H_INCLUDED_ | 
 | #define _NGX_SLAB_H_INCLUDED_ | 
 |  | 
 |  | 
 | #include <ngx_config.h> | 
 | #include <ngx_core.h> | 
 |  | 
 |  | 
 | typedef struct ngx_slab_page_s  ngx_slab_page_t; | 
 |  | 
 | struct ngx_slab_page_s { | 
 |     uintptr_t         slab; | 
 |     ngx_slab_page_t  *next; | 
 |     uintptr_t         prev; | 
 | }; | 
 |  | 
 |  | 
 | typedef struct { | 
 |     ngx_shmtx_sh_t    lock; | 
 |  | 
 |     size_t            min_size; | 
 |     size_t            min_shift; | 
 |  | 
 |     ngx_slab_page_t  *pages; | 
 |     ngx_slab_page_t   free; | 
 |  | 
 |     u_char           *start; | 
 |     u_char           *end; | 
 |  | 
 |     ngx_shmtx_t       mutex; | 
 |  | 
 |     u_char           *log_ctx; | 
 |     u_char            zero; | 
 |  | 
 |     void             *data; | 
 |     void             *addr; | 
 | } ngx_slab_pool_t; | 
 |  | 
 |  | 
 | void ngx_slab_init(ngx_slab_pool_t *pool); | 
 | void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size); | 
 | void *ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size); | 
 | void ngx_slab_free(ngx_slab_pool_t *pool, void *p); | 
 | void ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p); | 
 |  | 
 |  | 
 | #endif /* _NGX_SLAB_H_INCLUDED_ */ |