]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Expand the usage of mark_ancient() helper functions
authorOndřej Surý <ondrej@isc.org>
Sun, 2 Feb 2025 12:56:37 +0000 (13:56 +0100)
committerOndřej Surý <ondrej@isc.org>
Mon, 3 Feb 2025 14:53:34 +0000 (15:53 +0100)
When the mark_ancient() helper function was introduced, couple of places
with duplicate (or almost duplicate) code was missed.  Move the
mark_ancient() function closer to the top of the file, and correctly use
it in places that mark the header as ANCIENT.

(cherry picked from commit 58179e6a192998a49732df57847091e42c654f0b)

lib/dns/qpcache.c
lib/dns/rbt-cachedb.c
lib/dns/rbtdb.c
lib/dns/rbtdb_p.h

index 25a93431d20a85857200fa741a402ef208f23e2a..633d527a80c2e27cc73a31b517b64a7e2f338b28 100644 (file)
@@ -954,15 +954,20 @@ setttl(dns_slabheader_t *header, dns_ttl_t newttl) {
        }
 }
 
+static void
+mark_ancient(dns_slabheader_t *header) {
+       setttl(header, 0);
+       mark(header, DNS_SLABHEADERATTR_ANCIENT);
+       HEADERNODE(header)->dirty = 1;
+}
+
 /*
  * Caller must hold the node (write) lock.
  */
 static void
 expireheader(dns_slabheader_t *header, isc_rwlocktype_t *nlocktypep,
             isc_rwlocktype_t *tlocktypep, dns_expire_t reason DNS__DB_FLARG) {
-       setttl(header, 0);
-       mark(header, DNS_SLABHEADERATTR_ANCIENT);
-       HEADERNODE(header)->dirty = 1;
+       mark_ancient(header);
 
        if (isc_refcount_current(&HEADERNODE(header)->erefs) == 0) {
                qpcache_t *qpdb = (qpcache_t *)header->db;
@@ -1271,8 +1276,7 @@ check_stale_header(qpcnode_t *node, dns_slabheader_t *header,
                                }
                                dns_slabheader_destroy(&header);
                        } else {
-                               mark(header, DNS_SLABHEADERATTR_ANCIENT);
-                               HEADERNODE(header)->dirty = 1;
+                               mark_ancient(header);
                                *header_prev = header;
                        }
                } else {
@@ -2234,8 +2238,7 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
                                 * non-zero.  This is so because 'node' is an
                                 * argument to the function.
                                 */
-                               mark(header, DNS_SLABHEADERATTR_ANCIENT);
-                               HEADERNODE(header)->dirty = 1;
+                               mark_ancient(header);
                        }
                } else if (EXISTS(header) && !ANCIENT(header)) {
                        if (header->type == matchtype) {
@@ -2586,13 +2589,6 @@ qpdb_destroy(dns_db_t *arg) {
        qpcache_detach(&qpdb);
 }
 
-static void
-mark_ancient(dns_slabheader_t *header) {
-       setttl(header, 0);
-       mark(header, DNS_SLABHEADERATTR_ANCIENT);
-       HEADERNODE(header)->dirty = 1;
-}
-
 /*%
  * Clean up dead nodes.  These are nodes which have no references, and
  * have no data.  They are dead but we could not or chose not to delete
@@ -3163,7 +3159,6 @@ find_header:
                        newheader->next = topheader->next;
                        newheader->down = topheader;
                        topheader->next = newheader;
-                       qpnode->dirty = 1;
                        mark_ancient(header);
                        if (sigheader != NULL) {
                                mark_ancient(sigheader);
index f449e90cfd73efcedf78acc06eae96749cd27969..7a7773986971467bbee5c2b1c84610dfe85cb9d0 100644 (file)
@@ -417,9 +417,7 @@ check_stale_header(dns_rbtnode_t *node, dns_slabheader_t *header,
                                }
                                dns_slabheader_destroy(&header);
                        } else {
-                               dns__rbtdb_mark(header,
-                                               DNS_SLABHEADERATTR_ANCIENT);
-                               RBTDB_HEADERNODE(header)->dirty = 1;
+                               dns__rbtdb_mark_ancient(header);
                                *header_prev = header;
                        }
                } else {
@@ -1401,9 +1399,7 @@ cache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
                                 * non-zero.  This is so because 'node' is an
                                 * argument to the function.
                                 */
-                               dns__rbtdb_mark(header,
-                                               DNS_SLABHEADERATTR_ANCIENT);
-                               RBTDB_HEADERNODE(header)->dirty = 1;
+                               dns__rbtdb_mark_ancient(header);
                        }
                } else if (EXISTS(header) && !ANCIENT(header)) {
                        if (header->type == matchtype) {
@@ -1589,9 +1585,7 @@ void
 dns__cacherbt_expireheader(dns_slabheader_t *header,
                           isc_rwlocktype_t *tlocktypep,
                           dns_expire_t reason DNS__DB_FLARG) {
-       dns__rbtdb_setttl(header, 0);
-       dns__rbtdb_mark(header, DNS_SLABHEADERATTR_ANCIENT);
-       RBTDB_HEADERNODE(header)->dirty = 1;
+       dns__rbtdb_mark_ancient(header);
 
        if (isc_refcount_current(&RBTDB_HEADERNODE(header)->references) == 0) {
                isc_rwlocktype_t nlocktype = isc_rwlocktype_write;
index cd81fe45501c12f356986be48f981bd0cdd9241b..cb69d6be0ce76d06527a8df78b56ed2ffcbff64e 100644 (file)
@@ -857,8 +857,8 @@ dns__rbtdb_mark(dns_slabheader_t *header, uint_least16_t flag) {
        }
 }
 
-static void
-mark_ancient(dns_slabheader_t *header) {
+void
+dns__rbtdb_mark_ancient(dns_slabheader_t *header) {
        dns__rbtdb_setttl(header, 0);
        dns__rbtdb_mark(header, DNS_SLABHEADERATTR_ANCIENT);
        RBTDB_HEADERNODE(header)->dirty = 1;
@@ -2604,7 +2604,7 @@ dns__rbtdb_add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode,
                                     topheader != NULL;
                                     topheader = topheader->next)
                                {
-                                       mark_ancient(topheader);
+                                       dns__rbtdb_mark_ancient(topheader);
                                }
                                goto find_header;
                        }
@@ -2667,7 +2667,7 @@ dns__rbtdb_add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode,
                                 * The new rdataset is better.  Expire the
                                 * ncache entry.
                                 */
-                               mark_ancient(topheader);
+                               dns__rbtdb_mark_ancient(topheader);
                                topheader = NULL;
                                goto find_header;
                        }
@@ -3013,9 +3013,9 @@ find_header:
                                changed->dirty = true;
                        }
                        if (rbtversion == NULL) {
-                               mark_ancient(header);
+                               dns__rbtdb_mark_ancient(header);
                                if (sigheader != NULL) {
-                                       mark_ancient(sigheader);
+                                       dns__rbtdb_mark_ancient(sigheader);
                                }
                        }
                        if (rbtversion != NULL && !header_nx) {
@@ -3119,7 +3119,7 @@ find_header:
                                        expireheader = newheader;
                                }
 
-                               mark_ancient(expireheader);
+                               dns__rbtdb_mark_ancient(expireheader);
                                /*
                                 * FIXME: In theory, we should mark the RRSIG
                                 * and the header at the same time, but there is
index 45ab1bcc90f17117d5acd13fe6541f0f51520a74..1b2c7dca2e43d6045856e2f0bfa1539f94049d67 100644 (file)
@@ -486,6 +486,8 @@ dns__zonerbt_addwildcards(dns_rbtdb_t *rbtdb, const dns_name_t *name,
  * Cache-specific functions that are called from rbtdb.c
  */
 void
+dns__rbtdb_mark_ancient(dns_slabheader_t *header);
+void
 dns__cacherbt_expireheader(dns_slabheader_t *header,
                           isc_rwlocktype_t *tlocktypep,
                           dns_expire_t reason DNS__DB_FLARG);