size_t len;
/** labels */
int labs;
+ /** now */
+ uint32_t now;
/** time to invalidate to */
uint32_t expired;
/** number of rrsets removed */
if(dname_subdomain_c(k->rk.dname, inf->name)) {
struct packed_rrset_data* d =
(struct packed_rrset_data*)e->data;
- d->ttl = inf->expired;
- inf->num_rrsets++;
+ if(d->ttl >= inf->now) {
+ d->ttl = inf->expired;
+ inf->num_rrsets++;
+ }
}
}
struct msgreply_entry* k = (struct msgreply_entry*)e->key;
if(dname_subdomain_c(k->key.qname, inf->name)) {
struct reply_info* d = (struct reply_info*)e->data;
- d->ttl = inf->expired;
- inf->num_msgs++;
+ if(d->ttl >= inf->now) {
+ d->ttl = inf->expired;
+ inf->num_msgs++;
+ }
}
}
struct key_entry_key* k = (struct key_entry_key*)e->key;
if(dname_subdomain_c(k->name, inf->name)) {
struct key_entry_data* d = (struct key_entry_data*)e->data;
- d->ttl = inf->expired;
- inf->num_keys++;
+ if(d->ttl >= inf->now) {
+ d->ttl = inf->expired;
+ inf->num_keys++;
+ }
}
}
inf.name = nm;
inf.len = nmlen;
inf.labs = nmlabs;
+ inf.now = *worker->env.now;
inf.expired = *worker->env.now;
inf.expired -= 3; /* handle 3 seconds skew between threads */
inf.num_rrsets = 0;