diff options
author | Ruslan Ermilov <ru@nginx.com> | 2017-07-04 18:50:41 +0300 |
---|---|---|
committer | Ruslan Ermilov <ru@nginx.com> | 2017-07-04 18:50:41 +0300 |
commit | 6330817a96bbe2227dd6f2cfeaa785ed27c169a0 (patch) | |
tree | 7197ea1fbae08d8afe40c55dc994dab4d2117115 | |
parent | 225a5c7704f0c98d91fd908c210d3957454ef20e (diff) | |
download | nginx-6330817a96bbe2227dd6f2cfeaa785ed27c169a0.tar.gz |
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.
-rw-r--r-- | src/core/ngx_resolver.c | 2 | ||||
-rw-r--r-- | src/core/ngx_resolver.h | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index d3747d149..cd55520cb 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -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); diff --git a/src/core/ngx_resolver.h b/src/core/ngx_resolver.h index 6f099b70f..0bd392189 100644 --- a/src/core/ngx_resolver.h +++ b/src/core/ngx_resolver.h @@ -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; }; |