/* | |
* Copyright (C) Igor Sysoev | |
*/ | |
#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_atomic_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; | |
} 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_free(ngx_slab_pool_t *pool, void *p); | |
#endif /* _NGX_SLAB_H_INCLUDED_ */ |