Expand the usage of mark_ancient() helper functions
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 58179e6a19)
This commit is contained in:
+10
-15
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
+7
-7
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user