blob: ea9e0ea253126a345fa32b3f7fa22f2fc15a792f [file] [log] [blame]
Igor Sysoevd90282d2004-09-28 08:34:51 +00001
2/*
Igor Sysoevff8da912004-09-29 16:00:49 +00003 * Copyright (C) Igor Sysoev
Igor Sysoevd90282d2004-09-28 08:34:51 +00004 */
5
6
Igor Sysoevf924e6b2004-06-16 19:36:07 +00007#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
Igor Sysoev67cd3362006-11-20 08:51:45 +000015typedef struct ngx_slab_page_s ngx_slab_page_t;
Igor Sysoevf924e6b2004-06-16 19:36:07 +000016
Igor Sysoev67cd3362006-11-20 08:51:45 +000017struct ngx_slab_page_s {
18 uintptr_t slab;
19 ngx_slab_page_t *next;
20 uintptr_t prev;
Igor Sysoevf924e6b2004-06-16 19:36:07 +000021};
22
23
24typedef struct {
Igor Sysoev67cd3362006-11-20 08:51:45 +000025 ngx_atomic_t lock;
Igor Sysoevf924e6b2004-06-16 19:36:07 +000026
Igor Sysoev67cd3362006-11-20 08:51:45 +000027 size_t min_size;
28 size_t min_shift;
Igor Sysoevf924e6b2004-06-16 19:36:07 +000029
Igor Sysoev67cd3362006-11-20 08:51:45 +000030 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;
Igor Sysoevf924e6b2004-06-16 19:36:07 +000037} ngx_slab_pool_t;
38
39
Igor Sysoev67cd3362006-11-20 08:51:45 +000040void ngx_slab_init(ngx_slab_pool_t *pool);
41void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size);
42void ngx_slab_free(ngx_slab_pool_t *pool, void *p);
43
44
Igor Sysoevf924e6b2004-06-16 19:36:07 +000045#endif /* _NGX_SLAB_H_INCLUDED_ */