static isc_result_t
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_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
qpcnode_t *node = NULL;
isc_result_t result;
- qpc_search_t search;
bool cname_ok = true;
bool found_noqname = false;
bool all_negative = true;
dns_slabheader_t *foundsig = NULL, *nssig = NULL, *cnamesig = NULL;
dns_slabheader_t *nsecheader = NULL, *nsecsig = NULL;
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);
REQUIRE(VALID_QPDB((qpcache_t *)db));
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);
/*
static isc_result_t
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_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
qpcnode_t *node = NULL;
isc_rwlock_t *nlock = NULL;
isc_result_t result;
- qpc_search_t search;
dns_slabheader_t *header = NULL;
dns_slabheader_t *header_prev = NULL, *header_next = NULL;
dns_slabheader_t *found = NULL, *foundsig = NULL;
isc_rwlocktype_t tlocktype = isc_rwlocktype_none;
isc_rwlocktype_t nlocktype = isc_rwlocktype_none;
bool dcnull = (dcname == NULL);
-
- REQUIRE(VALID_QPDB((qpcache_t *)db));
-
- if (now == 0) {
- now = isc_stdtime_now();
- }
-
- search = (qpc_search_t){
+ qpc_search_t search = (qpc_search_t){
.qpdb = (qpcache_t *)db,
.options = options,
- .now = now,
+ .now = __now ? __now : isc_stdtime_now(),
};
+ REQUIRE(VALID_QPDB((qpcache_t *)db));
+
if (dcnull) {
dcname = foundname;
}
static isc_result_t
qpcache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
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) {
qpcache_t *qpdb = (qpcache_t *)db;
qpcnode_t *qpnode = (qpcnode_t *)node;
isc_result_t result;
isc_rwlock_t *nlock = NULL;
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(type != dns_rdatatype_any);
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;
NODE_RDLOCK(nlock, &nlocktype);
}
}
if (found != NULL) {
- bindrdatasets(qpdb, qpnode, found, foundsig, now, nlocktype,
- isc_rwlocktype_none, rdataset,
+ bindrdatasets(qpdb, qpnode, found, foundsig, search.now,
+ nlocktype, isc_rwlocktype_none, rdataset,
sigrdataset DNS__DB_FLARG_PASS);
maybe_update_headers(qpdb, found, foundsig, nlock, &nlocktype,
- now);
+ search.now);
}
NODE_UNLOCK(nlock, &nlocktype);
static isc_result_t
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) {
qpcache_t *qpdb = (qpcache_t *)db;
qpcnode_t *qpnode = (qpcnode_t *)node;
UNUSED(version);
iterator = isc_mem_get(qpdb->common.mctx, sizeof(*iterator));
-
- if (now == 0) {
- now = isc_stdtime_now();
- }
-
- iterator->common.magic = DNS_RDATASETITER_MAGIC;
- iterator->common.methods = &rdatasetiter_methods;
- iterator->common.db = db;
- iterator->common.node = node;
- iterator->common.version = NULL;
- iterator->common.options = options;
- iterator->common.now = now;
- iterator->current = NULL;
+ *iterator = (qpc_rditer_t){
+ .common.magic = DNS_RDATASETITER_MAGIC,
+ .common.methods = &rdatasetiter_methods,
+ .common.db = db,
+ .common.node = node,
+ .common.options = options,
+ .common.now = __now ? __now : isc_stdtime_now(),
+ };
qpcnode_acquire(qpdb, qpnode, isc_rwlocktype_none,
isc_rwlocktype_none DNS__DB_FLARG_PASS);
static isc_result_t
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,
dns_rdataset_t *addedrdataset DNS__DB_FLARG) {
qpcache_t *qpdb = (qpcache_t *)db;
bool cache_is_overmem = false;
dns_fixedname_t fixed;
dns_name_t *name = NULL;
+ isc_stdtime_t now = __now ? __now : isc_stdtime_now();
REQUIRE(VALID_QPDB(qpdb));
REQUIRE(version == NULL);
- if (now == 0) {
- now = isc_stdtime_now();
- }
-
result = dns_rdataslab_fromrdataset(rdataset, qpdb->common.mctx,
®ion, sizeof(dns_slabheader_t),
qpdb->maxrrperset);