Resolver: use minimum TTL for caching (ticket #329).
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index a446f98..9e39caa 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -678,6 +678,7 @@
rn->code = 0;
rn->cnlen = 0;
rn->valid = 0;
+ rn->ttl = NGX_MAX_UINT32_VALUE;
rn->waiting = ctx;
ctx->state = NGX_AGAIN;
@@ -871,6 +872,7 @@
rn->name = NULL;
rn->nlen = 0;
rn->valid = 0;
+ rn->ttl = NGX_MAX_UINT32_VALUE;
rn->waiting = ctx;
/* unlock addr mutex */
@@ -1574,7 +1576,6 @@
i = ans;
naddrs = 0;
cname = NULL;
- ttl = 0;
for (a = 0; a < nan; a++) {
@@ -1628,6 +1629,8 @@
ttl = 0;
}
+ rn->ttl = ngx_min(rn->ttl, (uint32_t) ttl);
+
i += sizeof(ngx_resolver_an_t);
switch (type) {
@@ -1694,8 +1697,8 @@
}
ngx_log_debug3(NGX_LOG_DEBUG_CORE, r->log, 0,
- "resolver naddrs:%ui cname:%p ttl:%d",
- naddrs, cname, ttl);
+ "resolver naddrs:%ui cname:%p ttl:%uD",
+ naddrs, cname, rn->ttl);
if (naddrs) {
@@ -1746,8 +1749,6 @@
#endif
}
- rn->ttl = ttl;
-
n = 0;
i = ans;
@@ -1915,7 +1916,7 @@
rn->cnlen = (u_short) name.len;
rn->u.cname = name.data;
- rn->valid = ngx_time() + (r->valid ? r->valid : ttl);
+ rn->valid = ngx_time() + (r->valid ? r->valid : (time_t) rn->ttl);
rn->expire = ngx_time() + r->expire;
ngx_queue_insert_head(&r->name_expire_queue, &rn->queue);