Resolver: cancelable resend timer event. 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.
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index d3747d1..cd55520 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c
@@ -191,6 +191,7 @@ 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 @@ 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);
diff --git a/src/core/ngx_resolver.h b/src/core/ngx_resolver.h index 6f099b7..0bd3921 100644 --- a/src/core/ngx_resolver.h +++ b/src/core/ngx_resolver.h
@@ -220,6 +220,7 @@ unsigned quick:1; unsigned async:1; + unsigned cancelable:1; ngx_uint_t recursion; ngx_event_t *event; };