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.
This commit is contained in:
Ruslan Ermilov 2017-07-04 18:50:41 +03:00
parent 225a5c7704
commit 6330817a96
2 changed files with 3 additions and 0 deletions

View 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->handler = ngx_resolver_resend_handler;
r->event->data = r; r->event->data = r;
r->event->log = &cf->cycle->new_log; r->event->log = &cf->cycle->new_log;
r->event->cancelable = 1;
r->ident = -1; r->ident = -1;
r->resend_timeout = 5; 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->handler = ngx_resolver_timeout_handler;
ctx->event->data = ctx; ctx->event->data = ctx;
ctx->event->log = r->log; ctx->event->log = r->log;
ctx->event->cancelable = ctx->cancelable;
ctx->ident = -1; ctx->ident = -1;
ngx_add_timer(ctx->event, ctx->timeout); ngx_add_timer(ctx->event, ctx->timeout);

View File

@ -220,6 +220,7 @@ struct ngx_resolver_ctx_s {
unsigned quick:1; unsigned quick:1;
unsigned async:1; unsigned async:1;
unsigned cancelable:1;
ngx_uint_t recursion; ngx_uint_t recursion;
ngx_event_t *event; ngx_event_t *event;
}; };