annotate src/core/ngx_palloc.c @ 6719:cebf5fed00bf

Modules compatibility: removed unneeded IPV6_V6ONLY checks. The IPV6_V6ONLY macro is now checked only while parsing appropriate flag and when using the macro. The ipv6only field in listen structures is always initialized to 1, even if not supported on a given platform. This is expected to prevent a module compiled without IPV6_V6ONLY from accidentally creating dual sockets if loaded into main binary with proper IPV6_V6ONLY support.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 03 Oct 2016 15:58:25 +0300
parents ad2360782ecd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4133
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
6
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
100
7ebc8b7fb816 nginx-0.0.1-2003-06-03-19:42:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
9 #include <ngx_core.h>
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
12 static ngx_inline void *ngx_palloc_small(ngx_pool_t *pool, size_t size,
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
13 ngx_uint_t align);
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
14 static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
15 static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
16
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
17
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
18 ngx_pool_t *
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
19 ngx_create_pool(size_t size, ngx_log_t *log)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 {
194
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
21 ngx_pool_t *p;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
3388
d788521e4b0e fix r3331:
Igor Sysoev <igor@sysoev.ru>
parents: 3330
diff changeset
23 p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
24 if (p == NULL) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
25 return NULL;
194
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
26 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
28 p->d.last = (u_char *) p + sizeof(ngx_pool_t);
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
29 p->d.end = (u_char *) p + size;
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
30 p->d.next = NULL;
2920
cb7d05c097db do not test a pool block space if we can not allocated from the block 4 times
Igor Sysoev <igor@sysoev.ru>
parents: 2917
diff changeset
31 p->d.failed = 0;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
32
2057
24eebb21b5d2 fix max size allocated from pool
Igor Sysoev <igor@sysoev.ru>
parents: 2056
diff changeset
33 size = size - sizeof(ngx_pool_t);
24eebb21b5d2 fix max size allocated from pool
Igor Sysoev <igor@sysoev.ru>
parents: 2056
diff changeset
34 p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
24eebb21b5d2 fix max size allocated from pool
Igor Sysoev <igor@sysoev.ru>
parents: 2056
diff changeset
35
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
36 p->current = p;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
37 p->chain = NULL;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 p->large = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
39 p->cleanup = NULL;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 p->log = log;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 return p;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
45
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
46 void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
47 ngx_destroy_pool(ngx_pool_t *pool)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
49 ngx_pool_t *p, *n;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
50 ngx_pool_large_t *l;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
51 ngx_pool_cleanup_t *c;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
52
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
53 for (c = pool->cleanup; c; c = c->next) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
54 if (c->handler) {
1744
d65172100f6b log run cleanups clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1317
diff changeset
55 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
d65172100f6b log run cleanups clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1317
diff changeset
56 "run cleanup: %p", c);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
57 c->handler(c->data);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
58 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
59 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
61 #if (NGX_DEBUG)
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
62
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
63 /*
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
64 * we could allocate the pool->log from this pool
4133
59b99f217c6d Replaced "can not" with "cannot" and "could not" in a bunch of places.
Ruslan Ermilov <ru@nginx.com>
parents: 3388
diff changeset
65 * so we cannot use this log while free()ing the pool
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
66 */
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 104
diff changeset
67
6452
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
68 for (l = pool->large; l; l = l->next) {
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
69 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
70 }
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
71
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
72 for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
73 ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
74 "free: %p, unused: %uz", p, p->d.end - p->d.last);
133
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
75
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
76 if (n == NULL) {
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
77 break;
b27548f540ad nginx-0.0.1-2003-09-24-23:51:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 128
diff changeset
78 }
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
79 }
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
80
39
83fa61cd3d2f nginx-0.0.1-2002-12-24-20:30:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
81 #endif
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
82
6452
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
83 for (l = pool->large; l; l = l->next) {
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
84 if (l->alloc) {
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
85 ngx_free(l->alloc);
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
86 }
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
87 }
6be7e59fdd2c Core: moved logging before freeing large blocks of pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5742
diff changeset
88
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
89 for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
90 ngx_free(p);
128
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
91
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
92 if (n == NULL) {
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
93 break;
1947c683490f nginx-0.0.1-2003-08-08-19:13:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 126
diff changeset
94 }
126
fcc79370b9a8 nginx-0.0.1-2003-08-06-18:43:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 104
diff changeset
95 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
98
2337
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
99 void
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
100 ngx_reset_pool(ngx_pool_t *pool)
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
101 {
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
102 ngx_pool_t *p;
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
103 ngx_pool_large_t *l;
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
104
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
105 for (l = pool->large; l; l = l->next) {
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
106 if (l->alloc) {
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
107 ngx_free(l->alloc);
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
108 }
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
109 }
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
110
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
111 for (p = pool; p; p = p->d.next) {
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
112 p->d.last = (u_char *) p + sizeof(ngx_pool_t);
5521
320abeb364e6 Core: improved ngx_reset_pool() (ticket #490).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
113 p->d.failed = 0;
2337
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
114 }
5521
320abeb364e6 Core: improved ngx_reset_pool() (ticket #490).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
115
320abeb364e6 Core: improved ngx_reset_pool() (ticket #490).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
116 pool->current = pool;
320abeb364e6 Core: improved ngx_reset_pool() (ticket #490).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
117 pool->chain = NULL;
320abeb364e6 Core: improved ngx_reset_pool() (ticket #490).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
118 pool->large = NULL;
2337
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
119 }
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
120
3983e673cd40 ngx_reset_pool()
Igor Sysoev <igor@sysoev.ru>
parents: 2289
diff changeset
121
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
122 void *
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
123 ngx_palloc(ngx_pool_t *pool, size_t size)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 {
6455
ad2360782ecd Core: introduced the NGX_DEBUG_PALLOC macro.
Valentin Bartenev <vbart@nginx.com>
parents: 6454
diff changeset
125 #if !(NGX_DEBUG_PALLOC)
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
126 if (size <= pool->max) {
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
127 return ngx_palloc_small(pool, size, 1);
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
128 }
6455
ad2360782ecd Core: introduced the NGX_DEBUG_PALLOC macro.
Valentin Bartenev <vbart@nginx.com>
parents: 6454
diff changeset
129 #endif
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
130
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
131 return ngx_palloc_large(pool, size);
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
132 }
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
133
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
134
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
135 void *
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
136 ngx_pnalloc(ngx_pool_t *pool, size_t size)
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
137 {
6455
ad2360782ecd Core: introduced the NGX_DEBUG_PALLOC macro.
Valentin Bartenev <vbart@nginx.com>
parents: 6454
diff changeset
138 #if !(NGX_DEBUG_PALLOC)
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
139 if (size <= pool->max) {
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
140 return ngx_palloc_small(pool, size, 0);
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
141 }
6455
ad2360782ecd Core: introduced the NGX_DEBUG_PALLOC macro.
Valentin Bartenev <vbart@nginx.com>
parents: 6454
diff changeset
142 #endif
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
143
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
144 return ngx_palloc_large(pool, size);
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
145 }
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
146
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
147
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
148 static ngx_inline void *
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
149 ngx_palloc_small(ngx_pool_t *pool, size_t size, ngx_uint_t align)
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
150 {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
151 u_char *m;
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
152 ngx_pool_t *p;
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
153
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
154 p = pool->current;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
155
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
156 do {
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
157 m = p->d.last;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
158
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
159 if (align) {
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
160 m = ngx_align_ptr(m, NGX_ALIGNMENT);
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
161 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
163 if ((size_t) (p->d.end - m) >= size) {
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
164 p->d.last = m + size;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
166 return m;
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
167 }
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
168
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
169 p = p->d.next;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
170
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
171 } while (p);
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
172
6453
12248fe20689 Core: introduced the ngx_palloc_small() function.
Valentin Bartenev <vbart@nginx.com>
parents: 6452
diff changeset
173 return ngx_palloc_block(pool, size);
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
174 }
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
175
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
176
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
177 static void *
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
178 ngx_palloc_block(ngx_pool_t *pool, size_t size)
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
179 {
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
180 u_char *m;
2055
cca975b532bf small optimization
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
181 size_t psize;
5742
c45c9812cf11 Core: removed meaningless check from ngx_palloc_block().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5521
diff changeset
182 ngx_pool_t *p, *new;
931
87f456ff13b0 fix segfault in "out of memory" situation
Igor Sysoev <igor@sysoev.ru>
parents: 860
diff changeset
183
2055
cca975b532bf small optimization
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
184 psize = (size_t) (pool->d.end - (u_char *) pool);
cca975b532bf small optimization
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
185
3388
d788521e4b0e fix r3331:
Igor Sysoev <igor@sysoev.ru>
parents: 3330
diff changeset
186 m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
2056
3ea9a03a1803 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2055
diff changeset
187 if (m == NULL) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
188 return NULL;
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
189 }
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
190
2056
3ea9a03a1803 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2055
diff changeset
191 new = (ngx_pool_t *) m;
3ea9a03a1803 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2055
diff changeset
192
3ea9a03a1803 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2055
diff changeset
193 new->d.end = m + psize;
2055
cca975b532bf small optimization
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
194 new->d.next = NULL;
2920
cb7d05c097db do not test a pool block space if we can not allocated from the block 4 times
Igor Sysoev <igor@sysoev.ru>
parents: 2917
diff changeset
195 new->d.failed = 0;
2055
cca975b532bf small optimization
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
196
2056
3ea9a03a1803 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2055
diff changeset
197 m += sizeof(ngx_pool_data_t);
2289
857c161d2768 align first allocation from additional pool block, this fixes bus error on sun4v
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
198 m = ngx_align_ptr(m, NGX_ALIGNMENT);
2056
3ea9a03a1803 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2055
diff changeset
199 new->d.last = m + size;
3ea9a03a1803 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2055
diff changeset
200
5742
c45c9812cf11 Core: removed meaningless check from ngx_palloc_block().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5521
diff changeset
201 for (p = pool->current; p->d.next; p = p->d.next) {
2920
cb7d05c097db do not test a pool block space if we can not allocated from the block 4 times
Igor Sysoev <igor@sysoev.ru>
parents: 2917
diff changeset
202 if (p->d.failed++ > 4) {
5742
c45c9812cf11 Core: removed meaningless check from ngx_palloc_block().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5521
diff changeset
203 pool->current = p->d.next;
194
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
204 }
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
205 }
194
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
206
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
207 p->d.next = new;
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
208
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
209 return m;
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
210 }
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
211
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
212
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
213 static void *
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
214 ngx_palloc_large(ngx_pool_t *pool, size_t size)
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
215 {
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
216 void *p;
2917
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
217 ngx_uint_t n;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2039
diff changeset
218 ngx_pool_large_t *large;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
3328
c16e1213bf96 large allocation should not be aligned to a page size
Igor Sysoev <igor@sysoev.ru>
parents: 3177
diff changeset
220 p = ngx_alloc(size, pool->log);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
221 if (p == NULL) {
347
f48d579daf78 nginx-0.0.3-2004-06-08-20:26:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
222 return NULL;
f48d579daf78 nginx-0.0.3-2004-06-08-20:26:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
223 }
2129
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
224
2917
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
225 n = 0;
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
226
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
227 for (large = pool->large; large; large = large->next) {
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
228 if (large->alloc == NULL) {
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
229 large->alloc = p;
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
230 return p;
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
231 }
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
232
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
233 if (n++ > 3) {
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
234 break;
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
235 }
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
236 }
62010fa37ead try to reuse last 4 free large allocation links
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
237
6454
f61472978419 Core: use ngx_palloc_small() to allocate ngx_pool_large_t.
Valentin Bartenev <vbart@nginx.com>
parents: 6453
diff changeset
238 large = ngx_palloc_small(pool, sizeof(ngx_pool_large_t), 1);
2129
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
239 if (large == NULL) {
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
240 ngx_free(p);
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
241 return NULL;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
242 }
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
243
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
244 large->alloc = p;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
245 large->next = pool->large;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
246 pool->large = large;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
247
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
248 return p;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
249 }
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
250
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
251
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
252 void *
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
253 ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
254 {
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
255 void *p;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
256 ngx_pool_large_t *large;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
257
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
258 p = ngx_memalign(alignment, size, pool->log);
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
259 if (p == NULL) {
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
260 return NULL;
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2057
diff changeset
261 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262
6454
f61472978419 Core: use ngx_palloc_small() to allocate ngx_pool_large_t.
Valentin Bartenev <vbart@nginx.com>
parents: 6453
diff changeset
263 large = ngx_palloc_small(pool, sizeof(ngx_pool_large_t), 1);
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
264 if (large == NULL) {
1317
276b981ca92f fix memory leak,
Igor Sysoev <igor@sysoev.ru>
parents: 1207
diff changeset
265 ngx_free(p);
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
266 return NULL;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
267 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
269 large->alloc = p;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
270 large->next = pool->large;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
271 pool->large = large;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
272
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
273 return p;
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
274 }
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
275
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
277 ngx_int_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
278 ngx_pfree(ngx_pool_t *pool, void *p)
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
279 {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
280 ngx_pool_large_t *l;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
282 for (l = pool->large; l; l = l->next) {
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
283 if (p == l->alloc) {
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
284 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
285 "free: %p", l->alloc);
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
286 ngx_free(l->alloc);
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
287 l->alloc = NULL;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
288
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
289 return NGX_OK;
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
290 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 }
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
292
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
293 return NGX_DECLINED;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295
156
afc333135a6b nginx-0.0.1-2003-10-23-10:13:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 133
diff changeset
296
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
297 void *
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
298 ngx_pcalloc(ngx_pool_t *pool, size_t size)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 {
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 void *p;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 p = ngx_palloc(pool, size);
39
83fa61cd3d2f nginx-0.0.1-2002-12-24-20:30:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
303 if (p) {
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304 ngx_memzero(p, size);
39
83fa61cd3d2f nginx-0.0.1-2002-12-24-20:30:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
305 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307 return p;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308 }
346
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
309
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
310
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
311 ngx_pool_cleanup_t *
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
312 ngx_pool_cleanup_add(ngx_pool_t *p, size_t size)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
313 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
314 ngx_pool_cleanup_t *c;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
315
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
316 c = ngx_palloc(p, sizeof(ngx_pool_cleanup_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
317 if (c == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
318 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
319 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
320
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
321 if (size) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
322 c->data = ngx_palloc(p, size);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
323 if (c->data == NULL) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
324 return NULL;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
325 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
326
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
327 } else {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
328 c->data = NULL;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
329 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
330
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
331 c->handler = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
332 c->next = p->cleanup;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
333
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
334 p->cleanup = c;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
335
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
336 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, p->log, 0, "add cleanup: %p", c);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
337
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
338 return c;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
339 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
340
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
341
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
342 void
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
343 ngx_pool_run_cleanup_file(ngx_pool_t *p, ngx_fd_t fd)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
344 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
345 ngx_pool_cleanup_t *c;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
346 ngx_pool_cleanup_file_t *cf;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
347
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
348 for (c = p->cleanup; c; c = c->next) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
349 if (c->handler == ngx_pool_cleanup_file) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
350
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
351 cf = c->data;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
352
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
353 if (cf->fd == fd) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
354 c->handler(cf);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
355 c->handler = NULL;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
356 return;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
357 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
358 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
359 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
360 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
361
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
362
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2337
diff changeset
363 void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
364 ngx_pool_cleanup_file(void *data)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
365 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
366 ngx_pool_cleanup_file_t *c = data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
367
1744
d65172100f6b log run cleanups clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1317
diff changeset
368 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, c->log, 0, "file cleanup: fd:%d",
d65172100f6b log run cleanups clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1317
diff changeset
369 c->fd);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
370
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
371 if (ngx_close_file(c->fd) == NGX_FILE_ERROR) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
372 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
373 ngx_close_file_n " \"%s\" failed", c->name);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
374 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
375 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
376
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
377
1075
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
378 void
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
379 ngx_pool_delete_file(void *data)
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
380 {
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
381 ngx_pool_cleanup_file_t *c = data;
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
382
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
383 ngx_err_t err;
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
384
1744
d65172100f6b log run cleanups clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1317
diff changeset
385 ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, c->log, 0, "file cleanup: fd:%d %s",
d65172100f6b log run cleanups clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1317
diff changeset
386 c->fd, c->name);
1075
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
387
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
388 if (ngx_delete_file(c->name) == NGX_FILE_ERROR) {
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
389 err = ngx_errno;
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
390
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
391 if (err != NGX_ENOENT) {
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
392 ngx_log_error(NGX_LOG_CRIT, c->log, err,
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
393 ngx_delete_file_n " \"%s\" failed", c->name);
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
394 }
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
395 }
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
396
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
397 if (ngx_close_file(c->fd) == NGX_FILE_ERROR) {
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
398 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
399 ngx_close_file_n " \"%s\" failed", c->name);
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
400 }
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
401 }
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
402
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 931
diff changeset
403
346
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
404 #if 0
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
405
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
406 static void *
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
407 ngx_get_cached_block(size_t size)
346
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
408 {
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
409 void *p;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
410 ngx_cached_block_slot_t *slot;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
411
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
412 if (ngx_cycle->cache == NULL) {
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
413 return NULL;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
414 }
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
415
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
416 slot = &ngx_cycle->cache[(size + ngx_pagesize - 1) / ngx_pagesize];
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
417
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
418 slot->tries++;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
419
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
420 if (slot->number) {
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
421 p = slot->block;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
422 slot->block = slot->block->next;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
423 slot->number--;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
424 return p;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
425 }
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
426
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
427 return NULL;
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
428 }
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
429
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
430 #endif