annotate src/core/ngx_palloc.c @ 7660:d33e17499088

Version bump.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 26 May 2020 22:03:00 +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