]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Remove expired rdataset headers from the heap
authorOndřej Surý <ondrej@isc.org>
Tue, 20 Feb 2024 07:50:58 +0000 (08:50 +0100)
committerOndřej Surý <ondrej@isc.org>
Thu, 29 Feb 2024 15:14:05 +0000 (16:14 +0100)
It was discovered that an expired header could sit on top of the heap
a little longer than desireable.  Remove expired headers (headers with
rdh_ttl set to 0) from the heap completely, so they don't block the next
TTL-based cleaning.

(cherry picked from commit a9383e4b95256a65f9f05e64a79b086a9a1ed035)
(cherry picked from commit abe080d16eac4f5dcca62cb08bd9ca2f82bdaa2b)

lib/dns/rbtdb.c

index 759a129f52adc0ace5e0c9c24fc2569bb7b713ec..1818d67c92458523f99689ee5aeb0825c34e296d 100644 (file)
@@ -972,6 +972,10 @@ set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) {
        } else {
                isc_heap_decreased(heap, header->heap_index);
        }
+
+       if (newttl == 0) {
+               isc_heap_delete(heap, header->heap_index);
+       }
 }
 
 /*%