annotate src/core/ngx_palloc.c @ 660:d0f7a625f27c NGINX_1_1_14

nginx 1.1.14 *) Feature: multiple "limit_req" limits may be used simultaneously. *) Bugfix: in error handling while connecting to a backend. Thanks to Piotr Sikora. *) Bugfix: in AIO error handling on FreeBSD. *) Bugfix: in the OpenSSL library initialization. *) Bugfix: the "proxy_redirect" directives might not be correctly inherited. *) Bugfix: memory leak during reconfiguration if the "pcre_jit" directive was used.
author Igor Sysoev <http://sysoev.ru>
date Mon, 30 Jan 2012 00:00:00 +0400
parents eb208e0cf44d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
660
d0f7a625f27c nginx 1.1.14
Igor Sysoev <http://sysoev.ru>
parents: 640
diff changeset
4 * Copyright (C) Nginx, Inc.
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
12 static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
13 static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
14
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
15
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
16 ngx_pool_t *
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
17 ngx_create_pool(size_t size, ngx_log_t *log)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 ngx_pool_t *p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20
558
2da4537168f8 nginx 0.8.31
Igor Sysoev <http://sysoev.ru>
parents: 546
diff changeset
21 p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
22 if (p == NULL) {
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
23 return NULL;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
26 p->d.last = (u_char *) p + sizeof(ngx_pool_t);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
27 p->d.end = (u_char *) p + size;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
28 p->d.next = NULL;
498
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
29 p->d.failed = 0;
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
30
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
31 size = size - sizeof(ngx_pool_t);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
32 p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
33
130
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
34 p->current = p;
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
35 p->chain = NULL;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 p->large = NULL;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
37 p->cleanup = NULL;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 p->log = log;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 return p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
44 void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
45 ngx_destroy_pool(ngx_pool_t *pool)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
47 ngx_pool_t *p, *n;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
48 ngx_pool_large_t *l;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
49 ngx_pool_cleanup_t *c;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
50
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
51 for (c = pool->cleanup; c; c = c->next) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
52 if (c->handler) {
356
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 322
diff changeset
53 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 322
diff changeset
54 "run cleanup: %p", c);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
55 c->handler(c->data);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
56 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
57 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59 for (l = pool->large; l; l = l->next) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
61 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
62
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63 if (l->alloc) {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
64 ngx_free(l->alloc);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
65 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
66 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
67
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
68 #if (NGX_DEBUG)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
69
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71 * we could allocate the pool->log from this pool
640
eb208e0cf44d nginx 1.1.4
Igor Sysoev <http://sysoev.ru>
parents: 558
diff changeset
72 * so we cannot use this log while free()ing the pool
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
75 for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
77 "free: %p, unused: %uz", p, p->d.end - p->d.last);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
78
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 if (n == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
82 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
83
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
86 for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
87 ngx_free(p);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89 if (n == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
92 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
93 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
94
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95
422
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
96 void
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
97 ngx_reset_pool(ngx_pool_t *pool)
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
98 {
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
99 ngx_pool_t *p;
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
100 ngx_pool_large_t *l;
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
101
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
102 for (l = pool->large; l; l = l->next) {
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
103 if (l->alloc) {
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
104 ngx_free(l->alloc);
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
105 }
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
106 }
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
107
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
108 pool->large = NULL;
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
109
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
110 for (p = pool; p; p = p->d.next) {
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
111 p->d.last = (u_char *) p + sizeof(ngx_pool_t);
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
112 }
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
113 }
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
114
88d3e895bdf9 nginx 0.7.23
Igor Sysoev <http://sysoev.ru>
parents: 416
diff changeset
115
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
116 void *
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
117 ngx_palloc(ngx_pool_t *pool, size_t size)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
118 {
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
119 u_char *m;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
120 ngx_pool_t *p;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
122 if (size <= pool->max) {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
123
270
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 258
diff changeset
124 p = pool->current;
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 258
diff changeset
125
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
126 do {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
127 m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
128
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
129 if ((size_t) (p->d.end - m) >= size) {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
130 p->d.last = m + size;
302
9b7db0df50f0 nginx 0.5.21
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
131
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
132 return m;
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
133 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
134
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
135 p = p->d.next;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
136
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
137 } while (p);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
138
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
139 return ngx_palloc_block(pool, size);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
140 }
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
141
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
142 return ngx_palloc_large(pool, size);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
143 }
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
144
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
145
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
146 void *
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
147 ngx_pnalloc(ngx_pool_t *pool, size_t size)
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
148 {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
149 u_char *m;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
150 ngx_pool_t *p;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
151
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
152 if (size <= pool->max) {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
153
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
154 p = pool->current;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
155
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
156 do {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
157 m = p->d.last;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
158
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
159 if ((size_t) (p->d.end - m) >= size) {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
160 p->d.last = m + size;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
161
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
162 return m;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
163 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
164
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
165 p = p->d.next;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
166
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
167 } while (p);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
168
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
169 return ngx_palloc_block(pool, size);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
170 }
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
171
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
172 return ngx_palloc_large(pool, size);
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
173 }
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
174
130
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
175
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
176 static void *
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
177 ngx_palloc_block(ngx_pool_t *pool, size_t size)
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
178 {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
179 u_char *m;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
180 size_t psize;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
181 ngx_pool_t *p, *new, *current;
270
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 258
diff changeset
182
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
183 psize = (size_t) (pool->d.end - (u_char *) pool);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
184
558
2da4537168f8 nginx 0.8.31
Igor Sysoev <http://sysoev.ru>
parents: 546
diff changeset
185 m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
186 if (m == NULL) {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
187 return NULL;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
188 }
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
189
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
190 new = (ngx_pool_t *) m;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
191
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
192 new->d.end = m + psize;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
193 new->d.next = NULL;
498
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
194 new->d.failed = 0;
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
195
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
196 m += sizeof(ngx_pool_data_t);
416
b4f69f2ef02c nginx 0.7.20
Igor Sysoev <http://sysoev.ru>
parents: 390
diff changeset
197 m = ngx_align_ptr(m, NGX_ALIGNMENT);
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
198 new->d.last = m + size;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
199
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
200 current = pool->current;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
201
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
202 for (p = current; p->d.next; p = p->d.next) {
498
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
203 if (p->d.failed++ > 4) {
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
204 current = p->d.next;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
205 }
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
206 }
130
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
207
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
208 p->d.next = new;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
209
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
210 pool->current = current ? current : new;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
211
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
212 return m;
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
213 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
214
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
215
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
216 static void *
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
217 ngx_palloc_large(ngx_pool_t *pool, size_t size)
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
218 {
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
219 void *p;
498
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
220 ngx_uint_t n;
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 380
diff changeset
221 ngx_pool_large_t *large;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
222
546
e19e5f542878 nginx 0.8.25
Igor Sysoev <http://sysoev.ru>
parents: 532
diff changeset
223 p = ngx_alloc(size, pool->log);
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
224 if (p == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
225 return NULL;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
226 }
390
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
227
498
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
228 n = 0;
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
229
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
230 for (large = pool->large; large; large = large->next) {
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
231 if (large->alloc == NULL) {
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
232 large->alloc = p;
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
233 return p;
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
234 }
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
235
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
236 if (n++ > 3) {
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
237 break;
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
238 }
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
239 }
207ae3ff0444 nginx 0.8.1
Igor Sysoev <http://sysoev.ru>
parents: 464
diff changeset
240
390
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
241 large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
242 if (large == NULL) {
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
243 ngx_free(p);
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
244 return NULL;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
245 }
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
246
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
247 large->alloc = p;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
248 large->next = pool->large;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
249 pool->large = large;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
250
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
251 return p;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
252 }
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
253
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
254
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
255 void *
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
256 ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
257 {
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
258 void *p;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
259 ngx_pool_large_t *large;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
260
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
261 p = ngx_memalign(alignment, size, pool->log);
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
262 if (p == NULL) {
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
263 return NULL;
0b6053502c55 nginx 0.7.7
Igor Sysoev <http://sysoev.ru>
parents: 382
diff changeset
264 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
265
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 154
diff changeset
266 large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 154
diff changeset
267 if (large == NULL) {
322
d16d691432c9 nginx 0.6.5
Igor Sysoev <http://sysoev.ru>
parents: 302
diff changeset
268 ngx_free(p);
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 154
diff changeset
269 return NULL;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
270 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
271
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
272 large->alloc = p;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 154
diff changeset
273 large->next = pool->large;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 154
diff changeset
274 pool->large = large;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
275
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
276 return p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
277 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
278
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
279
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
280 ngx_int_t
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
281 ngx_pfree(ngx_pool_t *pool, void *p)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
282 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
283 ngx_pool_large_t *l;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
284
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
285 for (l = pool->large; l; l = l->next) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
286 if (p == l->alloc) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
287 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
288 "free: %p", l->alloc);
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
289 ngx_free(l->alloc);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
290 l->alloc = NULL;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
291
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
292 return NGX_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
293 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
294 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
295
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
296 return NGX_DECLINED;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
297 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
298
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
299
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
300 void *
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
301 ngx_pcalloc(ngx_pool_t *pool, size_t size)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
302 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
303 void *p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
304
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
305 p = ngx_palloc(pool, size);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
306 if (p) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
307 ngx_memzero(p, size);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
308 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
309
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
310 return p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
311 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
312
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
313
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
314 ngx_pool_cleanup_t *
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
315 ngx_pool_cleanup_add(ngx_pool_t *p, size_t size)
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
316 {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
317 ngx_pool_cleanup_t *c;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
318
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
319 c = ngx_palloc(p, sizeof(ngx_pool_cleanup_t));
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
320 if (c == NULL) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
321 return NULL;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
322 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
323
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
324 if (size) {
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
325 c->data = ngx_palloc(p, size);
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
326 if (c->data == NULL) {
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
327 return NULL;
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
328 }
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
329
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
330 } else {
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
331 c->data = NULL;
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
332 }
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
333
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
334 c->handler = NULL;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
335 c->next = p->cleanup;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
336
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
337 p->cleanup = c;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
338
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
339 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, p->log, 0, "add cleanup: %p", c);
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
340
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
341 return c;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
342 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
343
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
344
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
345 void
464
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
346 ngx_pool_run_cleanup_file(ngx_pool_t *p, ngx_fd_t fd)
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
347 {
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
348 ngx_pool_cleanup_t *c;
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
349 ngx_pool_cleanup_file_t *cf;
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
350
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
351 for (c = p->cleanup; c; c = c->next) {
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
352 if (c->handler == ngx_pool_cleanup_file) {
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
353
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
354 cf = c->data;
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
355
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
356 if (cf->fd == fd) {
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
357 c->handler(cf);
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
358 c->handler = NULL;
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
359 return;
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
360 }
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
361 }
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
362 }
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
363 }
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
364
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
365
c8cfb6c462ef nginx 0.7.44
Igor Sysoev <http://sysoev.ru>
parents: 422
diff changeset
366 void
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
367 ngx_pool_cleanup_file(void *data)
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
368 {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
369 ngx_pool_cleanup_file_t *c = data;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
370
356
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 322
diff changeset
371 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, c->log, 0, "file cleanup: fd:%d",
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 322
diff changeset
372 c->fd);
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 76
diff changeset
373
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
374 if (ngx_close_file(c->fd) == NGX_FILE_ERROR) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
375 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
376 ngx_close_file_n " \"%s\" failed", c->name);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
377 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
378 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
379
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
380
278
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
381 void
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
382 ngx_pool_delete_file(void *data)
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
383 {
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
384 ngx_pool_cleanup_file_t *c = data;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
385
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
386 ngx_err_t err;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
387
356
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 322
diff changeset
388 ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, c->log, 0, "file cleanup: fd:%d %s",
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 322
diff changeset
389 c->fd, c->name);
278
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
390
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
391 if (ngx_delete_file(c->name) == NGX_FILE_ERROR) {
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
392 err = ngx_errno;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
393
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
394 if (err != NGX_ENOENT) {
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
395 ngx_log_error(NGX_LOG_CRIT, c->log, err,
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
396 ngx_delete_file_n " \"%s\" failed", c->name);
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
397 }
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
398 }
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
399
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
400 if (ngx_close_file(c->fd) == NGX_FILE_ERROR) {
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
401 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
402 ngx_close_file_n " \"%s\" failed", c->name);
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
403 }
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
404 }
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
405
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
406
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
407 #if 0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
408
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
409 static void *
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
410 ngx_get_cached_block(size_t size)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
411 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
412 void *p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
413 ngx_cached_block_slot_t *slot;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
414
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
415 if (ngx_cycle->cache == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
416 return NULL;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
417 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
418
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
419 slot = &ngx_cycle->cache[(size + ngx_pagesize - 1) / ngx_pagesize];
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
420
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
421 slot->tries++;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
422
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
423 if (slot->number) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
424 p = slot->block;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
425 slot->block = slot->block->next;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
426 slot->number--;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
427 return p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
428 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
429
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
430 return NULL;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
431 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
432
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
433 #endif