summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2017-07-04 18:50:41 +0300
committerRuslan Ermilov <ru@nginx.com>2017-07-04 18:50:41 +0300
commit6330817a96bbe2227dd6f2cfeaa785ed27c169a0 (patch)
tree7197ea1fbae08d8afe40c55dc994dab4d2117115
parent225a5c7704f0c98d91fd908c210d3957454ef20e (diff)
downloadnginx-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.c2
-rw-r--r--src/core/ngx_resolver.h1
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;
};