diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index 2197959174..fe69818f54 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -2912,15 +2912,7 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader, mark_ancient(oldheader); - if (EXISTS(newheader) && NEGATIVE(newheader) && - !dns_rdatatype_issig(rdtype)) - { - if (oldtop->related != NULL) { - dns_slabheader_t *oldsigheader = - first_header(oldtop->related); - mark_ancient(oldsigheader); - } - } + INSIST(oldtop->related == related); } else if (!EXISTS(newheader)) { /* * The type already doesn't exist; no point trying @@ -2975,6 +2967,18 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader, } } + /* + * We've added a proof that a rdtype doesn't exist. + * + * Mark the related rrsig in the cache as ancient. + */ + if (EXISTS(newheader) && NEGATIVE(newheader) && + !dns_rdatatype_issig(rdtype) && related != NULL) + { + dns_slabheader_t *oldsigheader = first_header(oldtop->related); + mark_ancient(oldsigheader); + } + bindrdataset(qpdb, qpnode, newheader, now, nlocktype, tlocktype, addedrdataset DNS__DB_FLARG_PASS);