Igor Sysoev | d90282d | 2004-09-28 08:34:51 +0000 | [diff] [blame] | 1 | |
| 2 | /* |
Igor Sysoev | ff8da91 | 2004-09-29 16:00:49 +0000 | [diff] [blame] | 3 | * Copyright (C) Igor Sysoev |
Maxim Konovalov | f8d59e3 | 2012-01-18 15:07:43 +0000 | [diff] [blame] | 4 | * Copyright (C) Nginx, Inc. |
Igor Sysoev | d90282d | 2004-09-28 08:34:51 +0000 | [diff] [blame] | 5 | */ |
| 6 | |
| 7 | |
Igor Sysoev | 0ab91b9 | 2004-06-06 19:49:18 +0000 | [diff] [blame] | 8 | #ifndef _NGX_PALLOC_H_INCLUDED_ |
| 9 | #define _NGX_PALLOC_H_INCLUDED_ |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 10 | |
| 11 | |
| 12 | #include <ngx_config.h> |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame] | 13 | #include <ngx_core.h> |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 14 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 15 | |
Igor Sysoev | f107910 | 2003-10-23 06:13:16 +0000 | [diff] [blame] | 16 | /* |
Igor Sysoev | 2402502 | 2005-12-16 15:07:08 +0000 | [diff] [blame] | 17 | * NGX_MAX_ALLOC_FROM_POOL should be (ngx_pagesize - 1), i.e. 4095 on x86. |
Igor Sysoev | a8fa0a6 | 2003-11-25 20:44:56 +0000 | [diff] [blame] | 18 | * On Windows NT it decreases a number of locked pages in a kernel. |
Igor Sysoev | b1ab5d0 | 2003-04-21 14:55:47 +0000 | [diff] [blame] | 19 | */ |
Igor Sysoev | 0ab91b9 | 2004-06-06 19:49:18 +0000 | [diff] [blame] | 20 | #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 21 | |
Igor Sysoev | 08d068f | 2007-05-07 09:20:42 +0000 | [diff] [blame] | 22 | #define NGX_DEFAULT_POOL_SIZE (16 * 1024) |
Igor Sysoev | 04799a6 | 2009-12-17 12:25:46 +0000 | [diff] [blame] | 23 | |
| 24 | #define NGX_POOL_ALIGNMENT 16 |
Igor Sysoev | 08d068f | 2007-05-07 09:20:42 +0000 | [diff] [blame] | 25 | #define NGX_MIN_POOL_SIZE \ |
Igor Sysoev | 04799a6 | 2009-12-17 12:25:46 +0000 | [diff] [blame] | 26 | ngx_align((sizeof(ngx_pool_t) + 2 * sizeof(ngx_pool_large_t)), \ |
| 27 | NGX_POOL_ALIGNMENT) |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 28 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 29 | |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 30 | typedef void (*ngx_pool_cleanup_pt)(void *data); |
| 31 | |
| 32 | typedef struct ngx_pool_cleanup_s ngx_pool_cleanup_t; |
| 33 | |
| 34 | struct ngx_pool_cleanup_s { |
| 35 | ngx_pool_cleanup_pt handler; |
| 36 | void *data; |
| 37 | ngx_pool_cleanup_t *next; |
| 38 | }; |
| 39 | |
| 40 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 41 | typedef struct ngx_pool_large_s ngx_pool_large_t; |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame] | 42 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 43 | struct ngx_pool_large_s { |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 44 | ngx_pool_large_t *next; |
| 45 | void *alloc; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 46 | }; |
| 47 | |
Igor Sysoev | 1c10462 | 2003-06-03 15:42:58 +0000 | [diff] [blame] | 48 | |
Igor Sysoev | 7f6b2ff | 2008-06-17 15:00:30 +0000 | [diff] [blame] | 49 | typedef struct { |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 50 | u_char *last; |
| 51 | u_char *end; |
Igor Sysoev | 7f6b2ff | 2008-06-17 15:00:30 +0000 | [diff] [blame] | 52 | ngx_pool_t *next; |
Igor Sysoev | 7f9305c | 2009-06-05 13:27:12 +0000 | [diff] [blame] | 53 | ngx_uint_t failed; |
Igor Sysoev | 7f6b2ff | 2008-06-17 15:00:30 +0000 | [diff] [blame] | 54 | } ngx_pool_data_t; |
| 55 | |
| 56 | |
| 57 | struct ngx_pool_s { |
| 58 | ngx_pool_data_t d; |
| 59 | size_t max; |
Igor Sysoev | c31a9bb | 2005-11-26 10:11:11 +0000 | [diff] [blame] | 60 | ngx_pool_t *current; |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 61 | ngx_chain_t *chain; |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 62 | ngx_pool_large_t *large; |
| 63 | ngx_pool_cleanup_t *cleanup; |
| 64 | ngx_log_t *log; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 65 | }; |
| 66 | |
| 67 | |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 68 | typedef struct { |
| 69 | ngx_fd_t fd; |
| 70 | u_char *name; |
| 71 | ngx_log_t *log; |
| 72 | } ngx_pool_cleanup_file_t; |
| 73 | |
| 74 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 75 | void *ngx_alloc(size_t size, ngx_log_t *log); |
| 76 | void *ngx_calloc(size_t size, ngx_log_t *log); |
| 77 | |
| 78 | ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log); |
| 79 | void ngx_destroy_pool(ngx_pool_t *pool); |
Igor Sysoev | 65eba4b | 2008-11-25 14:25:20 +0000 | [diff] [blame] | 80 | void ngx_reset_pool(ngx_pool_t *pool); |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 81 | |
| 82 | void *ngx_palloc(ngx_pool_t *pool, size_t size); |
Igor Sysoev | 7f6b2ff | 2008-06-17 15:00:30 +0000 | [diff] [blame] | 83 | void *ngx_pnalloc(ngx_pool_t *pool, size_t size); |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 84 | void *ngx_pcalloc(ngx_pool_t *pool, size_t size); |
Igor Sysoev | 385af28 | 2008-07-30 12:34:04 +0000 | [diff] [blame] | 85 | void *ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment); |
Igor Sysoev | f7abd72 | 2004-09-23 06:32:00 +0000 | [diff] [blame] | 86 | ngx_int_t ngx_pfree(ngx_pool_t *pool, void *p); |
Igor Sysoev | f107910 | 2003-10-23 06:13:16 +0000 | [diff] [blame] | 87 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 88 | |
Igor Sysoev | c2068d0 | 2005-10-19 12:33:58 +0000 | [diff] [blame] | 89 | ngx_pool_cleanup_t *ngx_pool_cleanup_add(ngx_pool_t *p, size_t size); |
Igor Sysoev | 52859f2 | 2009-03-23 13:14:51 +0000 | [diff] [blame] | 90 | void ngx_pool_run_cleanup_file(ngx_pool_t *p, ngx_fd_t fd); |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 91 | void ngx_pool_cleanup_file(void *data); |
Igor Sysoev | cd5b99a | 2007-01-25 08:45:04 +0000 | [diff] [blame] | 92 | void ngx_pool_delete_file(void *data); |
Igor Sysoev | 899b44e | 2005-05-12 14:58:06 +0000 | [diff] [blame] | 93 | |
| 94 | |
Igor Sysoev | 0ab91b9 | 2004-06-06 19:49:18 +0000 | [diff] [blame] | 95 | #endif /* _NGX_PALLOC_H_INCLUDED_ */ |