diff options
| author | Sergey Kandaurov <pluknet@nginx.com> | 2015-06-17 17:57:34 +0300 |
|---|---|---|
| committer | Sergey Kandaurov <pluknet@nginx.com> | 2015-06-17 17:57:34 +0300 |
| commit | f470cd2b893379312c89f3265d3f1cca499929e8 (patch) | |
| tree | 32dc5d13f63d5215733376183afd773b74ede309 | |
| parent | 58957fa3fc330e132d1f3a9c541cf33dac47e471 (diff) | |
| download | nginx-f470cd2b893379312c89f3265d3f1cca499929e8.tar.gz nginx-f470cd2b893379312c89f3265d3f1cca499929e8.tar.bz2 | |
Resolver: canceled resend timer on empty resend queues.
This is specifically useful on graceful shutdown.
Diffstat (limited to '')
| -rw-r--r-- | src/core/ngx_resolver.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index caa2b51c0..70138851e 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -71,6 +71,7 @@ static ngx_int_t ngx_resolver_create_addr_query(ngx_resolver_node_t *rn, static void ngx_resolver_resend_handler(ngx_event_t *ev); static time_t ngx_resolver_resend(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue); +static ngx_uint_t ngx_resolver_resend_empty(ngx_resolver_t *r); static void ngx_resolver_read_response(ngx_event_t *rev); static void ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, size_t n); @@ -463,6 +464,10 @@ done: ngx_resolver_free_locked(r, ctx); /* unlock alloc mutex */ + + if (r->event->timer_set && ngx_resolver_resend_empty(r)) { + ngx_del_timer(r->event); + } } @@ -1016,6 +1021,10 @@ done: ngx_resolver_free_locked(r, ctx); /* unlock alloc mutex */ + + if (r->event->timer_set && ngx_resolver_resend_empty(r)) { + ngx_del_timer(r->event); + } } @@ -1225,6 +1234,17 @@ ngx_resolver_resend(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue) } +static ngx_uint_t +ngx_resolver_resend_empty(ngx_resolver_t *r) +{ + return ngx_queue_empty(&r->name_resend_queue) +#if (NGX_HAVE_INET6) + && ngx_queue_empty(&r->addr6_resend_queue) +#endif + && ngx_queue_empty(&r->addr_resend_queue); +} + + static void ngx_resolver_read_response(ngx_event_t *rev) { |
