Old code was trying to refresh record after it has already expired. Now
it tries after 50% of TTL has passed - we do the same for other records.
Fixes: 80dd24602480 ("Refresh DNS records A and AAAA directly")
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
struct cache_service *s, *t;
avl_for_each_element_safe(&records, r, avl, p) {
struct cache_service *s, *t;
avl_for_each_element_safe(&records, r, avl, p) {
- if (!cache_is_expired(r->time, r->ttl, 100))
+ if (!cache_is_expired(r->time, r->ttl, r->refresh))
continue;
/* Records other and A(AAA) are handled as services */
if (r->type != TYPE_A && r->type != TYPE_AAAA) {
continue;
/* Records other and A(AAA) are handled as services */
if (r->type != TYPE_A && r->type != TYPE_AAAA) {
if (!a->ttl) {
DBG(1, "D -> %s %s ttl:%d\n", dns_type_string(r->type), r->record, r->ttl);
r->time = now + 1 - r->ttl;
if (!a->ttl) {
DBG(1, "D -> %s %s ttl:%d\n", dns_type_string(r->type), r->record, r->ttl);
r->time = now + 1 - r->ttl;
} else {
r->ttl = a->ttl;
r->time = now;
} else {
r->ttl = a->ttl;
r->time = now;
DBG(1, "A -> %s %s ttl:%d\n", dns_type_string(r->type), r->record, r->ttl);
}
return;
DBG(1, "A -> %s %s ttl:%d\n", dns_type_string(r->type), r->record, r->ttl);
}
return;
r->rdlength = dlen;
r->time = now;
r->iface = iface;
r->rdlength = dlen;
r->time = now;
r->iface = iface;
if (tlen)
r->txt = memcpy(txt_ptr, rdata_buffer, tlen);
if (tlen)
r->txt = memcpy(txt_ptr, rdata_buffer, tlen);