upstream nginx-0.7.31
[nginx.git] / nginx / src / core / ngx_slab.h
1
2 /*
3  * Copyright (C) Igor Sysoev
4  */
5
6
7 #ifndef _NGX_SLAB_H_INCLUDED_
8 #define _NGX_SLAB_H_INCLUDED_
9
10
11 #include <ngx_config.h>
12 #include <ngx_core.h>
13
14
15 typedef struct ngx_slab_page_s  ngx_slab_page_t;
16
17 struct ngx_slab_page_s {
18     uintptr_t         slab;
19     ngx_slab_page_t  *next;
20     uintptr_t         prev;
21 };
22
23
24 typedef struct {
25     ngx_atomic_t      lock;
26
27     size_t            min_size;
28     size_t            min_shift;
29
30     ngx_slab_page_t  *pages;
31     ngx_slab_page_t   free;
32
33     u_char           *start;
34     u_char           *end;
35
36     ngx_shmtx_t       mutex;
37 } ngx_slab_pool_t;
38
39
40 void ngx_slab_init(ngx_slab_pool_t *pool);
41 void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size);
42 void *ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size);
43 void ngx_slab_free(ngx_slab_pool_t *pool, void *p);
44 void ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p);
45
46
47 #endif /* _NGX_SLAB_H_INCLUDED_ */