2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-23 02:28:55 +00:00

Clean up 'now' usage in the cache

Unify the way we handle the 'now' argument in the cache: when it's
set to zero by the caller, it is replaced with isc_stdtime_now().
This commit is contained in:
Ondřej Surý 2025-02-03 00:00:39 +01:00 committed by Evan Hunt
parent 3b2fe808c4
commit 2d53796e28

View File

@ -1606,13 +1606,12 @@ find_coveringnsec(qpc_search_t *search, const dns_name_t *name,
static isc_result_t static isc_result_t
qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, dns_rdatatype_t type, unsigned int options, isc_stdtime_t __now,
dns_dbnode_t **nodep, dns_name_t *foundname, dns_dbnode_t **nodep, dns_name_t *foundname,
dns_rdataset_t *rdataset, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG) { dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
qpcnode_t *node = NULL; qpcnode_t *node = NULL;
isc_result_t result; isc_result_t result;
qpc_search_t search;
bool cname_ok = true; bool cname_ok = true;
bool found_noqname = false; bool found_noqname = false;
bool all_negative = true; bool all_negative = true;
@ -1626,22 +1625,17 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
dns_slabheader_t *foundsig = NULL, *nssig = NULL, *cnamesig = NULL; dns_slabheader_t *foundsig = NULL, *nssig = NULL, *cnamesig = NULL;
dns_slabheader_t *nsecheader = NULL, *nsecsig = NULL; dns_slabheader_t *nsecheader = NULL, *nsecsig = NULL;
dns_typepair_t sigtype, negtype; dns_typepair_t sigtype, negtype;
qpc_search_t search = (qpc_search_t){
.qpdb = (qpcache_t *)db,
.options = options,
.now = __now ? __now : isc_stdtime_now(),
};
UNUSED(version); UNUSED(version);
REQUIRE(VALID_QPDB((qpcache_t *)db)); REQUIRE(VALID_QPDB((qpcache_t *)db));
REQUIRE(version == NULL); REQUIRE(version == NULL);
if (now == 0) {
now = isc_stdtime_now();
}
search = (qpc_search_t){
.qpdb = (qpcache_t *)db,
.options = options,
.now = now,
};
TREE_RDLOCK(&search.qpdb->tree_lock, &tlocktype); TREE_RDLOCK(&search.qpdb->tree_lock, &tlocktype);
/* /*
@ -2005,33 +1999,27 @@ tree_exit:
static isc_result_t static isc_result_t
qpcache_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options, qpcache_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
isc_stdtime_t now, dns_dbnode_t **nodep, isc_stdtime_t __now, dns_dbnode_t **nodep,
dns_name_t *foundname, dns_name_t *dcname, dns_name_t *foundname, dns_name_t *dcname,
dns_rdataset_t *rdataset, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG) { dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
qpcnode_t *node = NULL; qpcnode_t *node = NULL;
isc_rwlock_t *nlock = NULL; isc_rwlock_t *nlock = NULL;
isc_result_t result; isc_result_t result;
qpc_search_t search;
dns_slabheader_t *header = NULL; dns_slabheader_t *header = NULL;
dns_slabheader_t *header_prev = NULL, *header_next = NULL; dns_slabheader_t *header_prev = NULL, *header_next = NULL;
dns_slabheader_t *found = NULL, *foundsig = NULL; dns_slabheader_t *found = NULL, *foundsig = NULL;
isc_rwlocktype_t tlocktype = isc_rwlocktype_none; isc_rwlocktype_t tlocktype = isc_rwlocktype_none;
isc_rwlocktype_t nlocktype = isc_rwlocktype_none; isc_rwlocktype_t nlocktype = isc_rwlocktype_none;
bool dcnull = (dcname == NULL); bool dcnull = (dcname == NULL);
qpc_search_t search = (qpc_search_t){
REQUIRE(VALID_QPDB((qpcache_t *)db));
if (now == 0) {
now = isc_stdtime_now();
}
search = (qpc_search_t){
.qpdb = (qpcache_t *)db, .qpdb = (qpcache_t *)db,
.options = options, .options = options,
.now = now, .now = __now ? __now : isc_stdtime_now(),
}; };
REQUIRE(VALID_QPDB((qpcache_t *)db));
if (dcnull) { if (dcnull) {
dcname = foundname; dcname = foundname;
} }
@ -2144,7 +2132,7 @@ tree_exit:
static isc_result_t static isc_result_t
qpcache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, qpcache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
dns_rdatatype_t type, dns_rdatatype_t covers, dns_rdatatype_t type, dns_rdatatype_t covers,
isc_stdtime_t now, dns_rdataset_t *rdataset, isc_stdtime_t __now, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG) { dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
qpcache_t *qpdb = (qpcache_t *)db; qpcache_t *qpdb = (qpcache_t *)db;
qpcnode_t *qpnode = (qpcnode_t *)node; qpcnode_t *qpnode = (qpcnode_t *)node;
@ -2155,7 +2143,10 @@ qpcache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
isc_result_t result; isc_result_t result;
isc_rwlock_t *nlock = NULL; isc_rwlock_t *nlock = NULL;
isc_rwlocktype_t nlocktype = isc_rwlocktype_none; isc_rwlocktype_t nlocktype = isc_rwlocktype_none;
qpc_search_t search; qpc_search_t search = (qpc_search_t){
.qpdb = (qpcache_t *)db,
.now = __now ? __now : isc_stdtime_now(),
};
REQUIRE(VALID_QPDB(qpdb)); REQUIRE(VALID_QPDB(qpdb));
REQUIRE(type != dns_rdatatype_any); REQUIRE(type != dns_rdatatype_any);
@ -2164,15 +2155,6 @@ qpcache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
result = ISC_R_SUCCESS; result = ISC_R_SUCCESS;
if (now == 0) {
now = isc_stdtime_now();
}
search = (qpc_search_t){
.qpdb = (qpcache_t *)db,
.now = now,
};
nlock = &qpdb->buckets[qpnode->locknum].lock; nlock = &qpdb->buckets[qpnode->locknum].lock;
NODE_RDLOCK(nlock, &nlocktype); NODE_RDLOCK(nlock, &nlocktype);
@ -2200,11 +2182,11 @@ qpcache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
} }
} }
if (found != NULL) { if (found != NULL) {
bindrdatasets(qpdb, qpnode, found, foundsig, now, nlocktype, bindrdatasets(qpdb, qpnode, found, foundsig, search.now,
isc_rwlocktype_none, rdataset, nlocktype, isc_rwlocktype_none, rdataset,
sigrdataset DNS__DB_FLARG_PASS); sigrdataset DNS__DB_FLARG_PASS);
maybe_update_headers(qpdb, found, foundsig, nlock, &nlocktype, maybe_update_headers(qpdb, found, foundsig, nlock, &nlocktype,
now); search.now);
} }
NODE_UNLOCK(nlock, &nlocktype); NODE_UNLOCK(nlock, &nlocktype);
@ -2688,7 +2670,7 @@ qpcache_createiterator(dns_db_t *db, unsigned int options ISC_ATTR_UNUSED,
static isc_result_t static isc_result_t
qpcache_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, qpcache_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
unsigned int options, isc_stdtime_t now, unsigned int options, isc_stdtime_t __now,
dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) { dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) {
qpcache_t *qpdb = (qpcache_t *)db; qpcache_t *qpdb = (qpcache_t *)db;
qpcnode_t *qpnode = (qpcnode_t *)node; qpcnode_t *qpnode = (qpcnode_t *)node;
@ -2699,19 +2681,14 @@ qpcache_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
UNUSED(version); UNUSED(version);
iterator = isc_mem_get(qpdb->common.mctx, sizeof(*iterator)); iterator = isc_mem_get(qpdb->common.mctx, sizeof(*iterator));
*iterator = (qpc_rditer_t){
if (now == 0) { .common.magic = DNS_RDATASETITER_MAGIC,
now = isc_stdtime_now(); .common.methods = &rdatasetiter_methods,
} .common.db = db,
.common.node = node,
iterator->common.magic = DNS_RDATASETITER_MAGIC; .common.options = options,
iterator->common.methods = &rdatasetiter_methods; .common.now = __now ? __now : isc_stdtime_now(),
iterator->common.db = db; };
iterator->common.node = node;
iterator->common.version = NULL;
iterator->common.options = options;
iterator->common.now = now;
iterator->current = NULL;
qpcnode_acquire(qpdb, qpnode, isc_rwlocktype_none, qpcnode_acquire(qpdb, qpnode, isc_rwlocktype_none,
isc_rwlocktype_none DNS__DB_FLARG_PASS); isc_rwlocktype_none DNS__DB_FLARG_PASS);
@ -3197,7 +3174,7 @@ expire_ttl_headers(qpcache_t *qpdb, unsigned int locknum,
static isc_result_t static isc_result_t
qpcache_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, qpcache_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
isc_stdtime_t now, dns_rdataset_t *rdataset, isc_stdtime_t __now, dns_rdataset_t *rdataset,
unsigned int options, unsigned int options,
dns_rdataset_t *addedrdataset DNS__DB_FLARG) { dns_rdataset_t *addedrdataset DNS__DB_FLARG) {
qpcache_t *qpdb = (qpcache_t *)db; qpcache_t *qpdb = (qpcache_t *)db;
@ -3213,14 +3190,11 @@ qpcache_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
bool cache_is_overmem = false; bool cache_is_overmem = false;
dns_fixedname_t fixed; dns_fixedname_t fixed;
dns_name_t *name = NULL; dns_name_t *name = NULL;
isc_stdtime_t now = __now ? __now : isc_stdtime_now();
REQUIRE(VALID_QPDB(qpdb)); REQUIRE(VALID_QPDB(qpdb));
REQUIRE(version == NULL); REQUIRE(version == NULL);
if (now == 0) {
now = isc_stdtime_now();
}
result = dns_rdataslab_fromrdataset(rdataset, qpdb->common.mctx, result = dns_rdataslab_fromrdataset(rdataset, qpdb->common.mctx,
&region, sizeof(dns_slabheader_t), &region, sizeof(dns_slabheader_t),
qpdb->maxrrperset); qpdb->maxrrperset);