Mercurial > hg > nginx-quic
comparison src/core/ngx_resolver.c @ 6196:c3ec43580a48
Resolver: canceled resend timer on empty resend queues.
This is specifically useful on graceful shutdown.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Wed, 17 Jun 2015 17:57:34 +0300 |
parents | adba26ff70b5 |
children | 81d44cd4044e |
comparison
equal
deleted
inserted
replaced
6195:e69d5e9be292 | 6196:c3ec43580a48 |
---|---|
69 static ngx_int_t ngx_resolver_create_addr_query(ngx_resolver_node_t *rn, | 69 static ngx_int_t ngx_resolver_create_addr_query(ngx_resolver_node_t *rn, |
70 ngx_resolver_ctx_t *ctx); | 70 ngx_resolver_ctx_t *ctx); |
71 static void ngx_resolver_resend_handler(ngx_event_t *ev); | 71 static void ngx_resolver_resend_handler(ngx_event_t *ev); |
72 static time_t ngx_resolver_resend(ngx_resolver_t *r, ngx_rbtree_t *tree, | 72 static time_t ngx_resolver_resend(ngx_resolver_t *r, ngx_rbtree_t *tree, |
73 ngx_queue_t *queue); | 73 ngx_queue_t *queue); |
74 static ngx_uint_t ngx_resolver_resend_empty(ngx_resolver_t *r); | |
74 static void ngx_resolver_read_response(ngx_event_t *rev); | 75 static void ngx_resolver_read_response(ngx_event_t *rev); |
75 static void ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, | 76 static void ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, |
76 size_t n); | 77 size_t n); |
77 static void ngx_resolver_process_a(ngx_resolver_t *r, u_char *buf, size_t n, | 78 static void ngx_resolver_process_a(ngx_resolver_t *r, u_char *buf, size_t n, |
78 ngx_uint_t ident, ngx_uint_t code, ngx_uint_t qtype, | 79 ngx_uint_t ident, ngx_uint_t code, ngx_uint_t qtype, |
461 } | 462 } |
462 | 463 |
463 ngx_resolver_free_locked(r, ctx); | 464 ngx_resolver_free_locked(r, ctx); |
464 | 465 |
465 /* unlock alloc mutex */ | 466 /* unlock alloc mutex */ |
467 | |
468 if (r->event->timer_set && ngx_resolver_resend_empty(r)) { | |
469 ngx_del_timer(r->event); | |
470 } | |
466 } | 471 } |
467 | 472 |
468 | 473 |
469 static ngx_int_t | 474 static ngx_int_t |
470 ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx) | 475 ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx) |
1014 } | 1019 } |
1015 | 1020 |
1016 ngx_resolver_free_locked(r, ctx); | 1021 ngx_resolver_free_locked(r, ctx); |
1017 | 1022 |
1018 /* unlock alloc mutex */ | 1023 /* unlock alloc mutex */ |
1024 | |
1025 if (r->event->timer_set && ngx_resolver_resend_empty(r)) { | |
1026 ngx_del_timer(r->event); | |
1027 } | |
1019 } | 1028 } |
1020 | 1029 |
1021 | 1030 |
1022 static void | 1031 static void |
1023 ngx_resolver_expire(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue) | 1032 ngx_resolver_expire(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue) |
1220 | 1229 |
1221 ngx_rbtree_delete(tree, &rn->node); | 1230 ngx_rbtree_delete(tree, &rn->node); |
1222 | 1231 |
1223 ngx_resolver_free_node(r, rn); | 1232 ngx_resolver_free_node(r, rn); |
1224 } | 1233 } |
1234 } | |
1235 | |
1236 | |
1237 static ngx_uint_t | |
1238 ngx_resolver_resend_empty(ngx_resolver_t *r) | |
1239 { | |
1240 return ngx_queue_empty(&r->name_resend_queue) | |
1241 #if (NGX_HAVE_INET6) | |
1242 && ngx_queue_empty(&r->addr6_resend_queue) | |
1243 #endif | |
1244 && ngx_queue_empty(&r->addr_resend_queue); | |
1225 } | 1245 } |
1226 | 1246 |
1227 | 1247 |
1228 static void | 1248 static void |
1229 ngx_resolver_read_response(ngx_event_t *rev) | 1249 ngx_resolver_read_response(ngx_event_t *rev) |