Mercurial > hg > nginx
comparison src/core/ngx_resolver.c @ 7298:f37d8fb25de5
Resolver: allocate resolver from configuration pool.
Before 4a8c9139e579, ngx_resolver_create() didn't use configuration
pool, and allocations were done using malloc().
In 016352c19049, when resolver gained support of several servers,
new allocations were done from the pool.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Wed, 13 Jun 2018 22:37:42 +0300 |
parents | 91ea68dd1501 |
children | faf14dc9ab4d |
comparison
equal
deleted
inserted
replaced
7297:a10e5fe44762 | 7298:f37d8fb25de5 |
---|---|
139 ngx_uint_t i, j; | 139 ngx_uint_t i, j; |
140 ngx_resolver_t *r; | 140 ngx_resolver_t *r; |
141 ngx_pool_cleanup_t *cln; | 141 ngx_pool_cleanup_t *cln; |
142 ngx_resolver_connection_t *rec; | 142 ngx_resolver_connection_t *rec; |
143 | 143 |
144 r = ngx_pcalloc(cf->pool, sizeof(ngx_resolver_t)); | |
145 if (r == NULL) { | |
146 return NULL; | |
147 } | |
148 | |
149 r->event = ngx_pcalloc(cf->pool, sizeof(ngx_event_t)); | |
150 if (r->event == NULL) { | |
151 return NULL; | |
152 } | |
153 | |
144 cln = ngx_pool_cleanup_add(cf->pool, 0); | 154 cln = ngx_pool_cleanup_add(cf->pool, 0); |
145 if (cln == NULL) { | 155 if (cln == NULL) { |
146 return NULL; | 156 return NULL; |
147 } | 157 } |
148 | 158 |
149 cln->handler = ngx_resolver_cleanup; | 159 cln->handler = ngx_resolver_cleanup; |
150 | |
151 r = ngx_calloc(sizeof(ngx_resolver_t), cf->log); | |
152 if (r == NULL) { | |
153 return NULL; | |
154 } | |
155 | |
156 cln->data = r; | 160 cln->data = r; |
157 | |
158 r->event = ngx_calloc(sizeof(ngx_event_t), cf->log); | |
159 if (r->event == NULL) { | |
160 return NULL; | |
161 } | |
162 | 161 |
163 ngx_rbtree_init(&r->name_rbtree, &r->name_sentinel, | 162 ngx_rbtree_init(&r->name_rbtree, &r->name_sentinel, |
164 ngx_resolver_rbtree_insert_value); | 163 ngx_resolver_rbtree_insert_value); |
165 | 164 |
166 ngx_rbtree_init(&r->srv_rbtree, &r->srv_sentinel, | 165 ngx_rbtree_init(&r->srv_rbtree, &r->srv_sentinel, |
286 ngx_resolver_t *r = data; | 285 ngx_resolver_t *r = data; |
287 | 286 |
288 ngx_uint_t i; | 287 ngx_uint_t i; |
289 ngx_resolver_connection_t *rec; | 288 ngx_resolver_connection_t *rec; |
290 | 289 |
291 if (r) { | 290 ngx_log_debug0(NGX_LOG_DEBUG_CORE, ngx_cycle->log, 0, "cleanup resolver"); |
292 ngx_log_debug0(NGX_LOG_DEBUG_CORE, ngx_cycle->log, 0, | 291 |
293 "cleanup resolver"); | 292 ngx_resolver_cleanup_tree(r, &r->name_rbtree); |
294 | 293 |
295 ngx_resolver_cleanup_tree(r, &r->name_rbtree); | 294 ngx_resolver_cleanup_tree(r, &r->srv_rbtree); |
296 | 295 |
297 ngx_resolver_cleanup_tree(r, &r->srv_rbtree); | 296 ngx_resolver_cleanup_tree(r, &r->addr_rbtree); |
298 | 297 |
299 ngx_resolver_cleanup_tree(r, &r->addr_rbtree); | 298 #if (NGX_HAVE_INET6) |
300 | 299 ngx_resolver_cleanup_tree(r, &r->addr6_rbtree); |
301 #if (NGX_HAVE_INET6) | 300 #endif |
302 ngx_resolver_cleanup_tree(r, &r->addr6_rbtree); | 301 |
303 #endif | 302 if (r->event->timer_set) { |
304 | 303 ngx_del_timer(r->event); |
305 if (r->event) { | 304 } |
306 if (r->event->timer_set) { | 305 |
307 ngx_del_timer(r->event); | 306 rec = r->connections.elts; |
308 } | 307 |
309 | 308 for (i = 0; i < r->connections.nelts; i++) { |
310 ngx_free(r->event); | 309 if (rec[i].udp) { |
311 } | 310 ngx_close_connection(rec[i].udp); |
312 | 311 } |
313 | 312 |
314 rec = r->connections.elts; | 313 if (rec[i].tcp) { |
315 | 314 ngx_close_connection(rec[i].tcp); |
316 for (i = 0; i < r->connections.nelts; i++) { | 315 } |
317 if (rec[i].udp) { | 316 |
318 ngx_close_connection(rec[i].udp); | 317 if (rec[i].read_buf) { |
319 } | 318 ngx_resolver_free(r, rec[i].read_buf->start); |
320 | 319 ngx_resolver_free(r, rec[i].read_buf); |
321 if (rec[i].tcp) { | 320 } |
322 ngx_close_connection(rec[i].tcp); | 321 |
323 } | 322 if (rec[i].write_buf) { |
324 | 323 ngx_resolver_free(r, rec[i].write_buf->start); |
325 if (rec[i].read_buf) { | 324 ngx_resolver_free(r, rec[i].write_buf); |
326 ngx_resolver_free(r, rec[i].read_buf->start); | 325 } |
327 ngx_resolver_free(r, rec[i].read_buf); | |
328 } | |
329 | |
330 if (rec[i].write_buf) { | |
331 ngx_resolver_free(r, rec[i].write_buf->start); | |
332 ngx_resolver_free(r, rec[i].write_buf); | |
333 } | |
334 } | |
335 | |
336 ngx_free(r); | |
337 } | 326 } |
338 } | 327 } |
339 | 328 |
340 | 329 |
341 static void | 330 static void |