]> git.kaiwu.me - nginx.git/commitdiff
Resolver: cancelable resend timer event.
authorRuslan Ermilov <ru@nginx.com>
Tue, 4 Jul 2017 15:50:41 +0000 (18:50 +0300)
committerRuslan Ermilov <ru@nginx.com>
Tue, 4 Jul 2017 15:50:41 +0000 (18:50 +0300)
It is safe because re-sending still works during graceful shutdown as
long as resolving takes place (and resolve tasks set their own timeouts
that are not cancelable).

Also, the new ctx->cancelable flag can be set to make resolve task's
timeout event cancelable.

src/core/ngx_resolver.c
src/core/ngx_resolver.h

index d3747d1497a881ed71289bf79752b8ef7113db18..cd55520cb4fdfde2485bc4767f9707f82f63cf44 100644 (file)
@@ -191,6 +191,7 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
     r->event->handler = ngx_resolver_resend_handler;
     r->event->data = r;
     r->event->log = &cf->cycle->new_log;
+    r->event->cancelable = 1;
     r->ident = -1;
 
     r->resend_timeout = 5;
@@ -4008,6 +4009,7 @@ ngx_resolver_set_timeout(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
     ctx->event->handler = ngx_resolver_timeout_handler;
     ctx->event->data = ctx;
     ctx->event->log = r->log;
+    ctx->event->cancelable = ctx->cancelable;
     ctx->ident = -1;
 
     ngx_add_timer(ctx->event, ctx->timeout);
index 6f099b70fb9b0c002defe09a6332497edb88a6db..0bd392189d940967c2b01f403231662ca5ca6146 100644 (file)
@@ -220,6 +220,7 @@ struct ngx_resolver_ctx_s {
 
     unsigned                  quick:1;
     unsigned                  async:1;
+    unsigned                  cancelable:1;
     ngx_uint_t                recursion;
     ngx_event_t              *event;
 };