resolved: use CLOCK_BOOTTIME instead of CLOCK_MONOTONIC when aging caches and timeing out transactions
That way the cache doens't get confused when the system is suspended.
This commit is contained in:
parent
7da40fc108
commit
9a015429b3
|
@ -153,7 +153,7 @@ void dns_cache_prune(DnsCache *c) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (t <= 0)
|
if (t <= 0)
|
||||||
t = now(CLOCK_MONOTONIC);
|
t = now(CLOCK_BOOTTIME);
|
||||||
|
|
||||||
if (i->until > t)
|
if (i->until > t)
|
||||||
break;
|
break;
|
||||||
|
@ -376,7 +376,7 @@ int dns_cache_put(DnsCache *c, DnsQuestion *q, int rcode, DnsAnswer *answer, uns
|
||||||
dns_cache_make_space(c, answer->n_rrs + q->n_keys);
|
dns_cache_make_space(c, answer->n_rrs + q->n_keys);
|
||||||
|
|
||||||
if (timestamp <= 0)
|
if (timestamp <= 0)
|
||||||
timestamp = now(CLOCK_MONOTONIC);
|
timestamp = now(CLOCK_BOOTTIME);
|
||||||
|
|
||||||
/* Second, add in positive entries for all contained RRs */
|
/* Second, add in positive entries for all contained RRs */
|
||||||
for (i = 0; i < MIN(max_rrs, answer->n_rrs); i++) {
|
for (i = 0; i < MIN(max_rrs, answer->n_rrs); i++) {
|
||||||
|
|
|
@ -278,7 +278,12 @@ int dns_query_go(DnsQuery *q) {
|
||||||
q->answer_ifindex = 0;
|
q->answer_ifindex = 0;
|
||||||
q->answer_rcode = 0;
|
q->answer_rcode = 0;
|
||||||
|
|
||||||
r = sd_event_add_time(q->manager->event, &q->timeout_event_source, CLOCK_MONOTONIC, now(CLOCK_MONOTONIC) + QUERY_TIMEOUT_USEC, 0, on_query_timeout, q);
|
r = sd_event_add_time(
|
||||||
|
q->manager->event,
|
||||||
|
&q->timeout_event_source,
|
||||||
|
clock_boottime_or_monotonic(),
|
||||||
|
now(clock_boottime_or_monotonic()) + QUERY_TIMEOUT_USEC, 0,
|
||||||
|
on_query_timeout, q);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -368,7 +368,12 @@ int dns_stream_new(Manager *m, DnsStream **ret, DnsProtocol protocol, int fd) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = sd_event_add_time(m->event, &s->timeout_event_source, CLOCK_MONOTONIC, now(CLOCK_MONOTONIC) + DNS_STREAM_TIMEOUT_USEC, 0, on_stream_timeout, s);
|
r = sd_event_add_time(
|
||||||
|
m->event,
|
||||||
|
&s->timeout_event_source,
|
||||||
|
clock_boottime_or_monotonic(),
|
||||||
|
now(clock_boottime_or_monotonic()) + DNS_STREAM_TIMEOUT_USEC, 0,
|
||||||
|
on_stream_timeout, s);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
|
@ -515,7 +515,12 @@ int dns_transaction_go(DnsTransaction *t) {
|
||||||
return dns_transaction_go(t);
|
return dns_transaction_go(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
r = sd_event_add_time(t->scope->manager->event, &t->timeout_event_source, CLOCK_MONOTONIC, now(CLOCK_MONOTONIC) + TRANSACTION_TIMEOUT_USEC(t->scope->protocol), 0, on_transaction_timeout, t);
|
r = sd_event_add_time(
|
||||||
|
t->scope->manager->event,
|
||||||
|
&t->timeout_event_source,
|
||||||
|
clock_boottime_or_monotonic(),
|
||||||
|
now(clock_boottime_or_monotonic()) + TRANSACTION_TIMEOUT_USEC(t->scope->protocol), 0,
|
||||||
|
on_transaction_timeout, t);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue