blob: 5bdacaf1b8e3084987429a8b71a2a961a3b9385e [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);
Igor Sysoevc33efcd2007-01-02 23:10:42 +000042void *ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size);
Igor Sysoev67cd3362006-11-20 08:51:45 +000043void ngx_slab_free(ngx_slab_pool_t *pool, void *p);
Igor Sysoevc33efcd2007-01-02 23:10:42 +000044void ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p);
Igor Sysoev67cd3362006-11-20 08:51:45 +000045
46
Igor Sysoevf924e6b2004-06-16 19:36:07 +000047#endif /* _NGX_SLAB_H_INCLUDED_ */