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