+3622. [tuning] Eliminate an unnecessary lock when incrementing
+ cache statistics. [RT #34339]
+
3621. [security] Incorrect bounds checking on private type 'keydata'
can lead to a remotely triggerable REQUIRE failure
(CVE-2013-4854). [RT #34238]
return (ISC_FALSE);
}
-static void
-update_cachestats(dns_cache_t *cache, isc_result_t result) {
- isc_stats_t *cachestats = NULL;
- if (cache == NULL)
- return;
-
- isc_stats_attach(dns_cache_getstats(cache), &cachestats);
- switch (result) {
- case ISC_R_SUCCESS:
- case DNS_R_NCACHENXDOMAIN:
- case DNS_R_NCACHENXRRSET:
- case DNS_R_CNAME:
- case DNS_R_DNAME:
- case DNS_R_GLUE:
- case DNS_R_ZONECUT:
- isc_stats_increment(cachestats,
- dns_cachestatscounter_queryhits);
- break;
- default:
- isc_stats_increment(cachestats,
- dns_cachestatscounter_querymisses);
- }
- isc_stats_detach(&cachestats);
-}
-
static isc_result_t
query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
ns_client_t *client = arg;
client->now, &node, fname, &cm, &ci,
rdataset, sigrdataset);
- update_cachestats(client->view->cache, result);
+ dns_cache_updatestats(client->view->cache, result);
if (result == DNS_R_GLUE &&
validate(client, db, fname, rdataset, sigrdataset))
result = ISC_R_SUCCESS;
&node, fname, &cm, &ci, rdataset, sigrdataset);
if (db == client->view->cachedb)
- update_cachestats(client->view->cache, result);
+ dns_cache_updatestats(client->view->cache, result);
resume:
CTRACE("query_find: resume");
return (cache->stats);
}
+void
+dns_cache_updatestats(dns_cache_t *cache, isc_result_t result) {
+ REQUIRE(VALID_CACHE(cache));
+ if (cache->stats == NULL)
+ return;
+
+ switch (result) {
+ case ISC_R_SUCCESS:
+ case DNS_R_NCACHENXDOMAIN:
+ case DNS_R_NCACHENXRRSET:
+ case DNS_R_CNAME:
+ case DNS_R_DNAME:
+ case DNS_R_GLUE:
+ case DNS_R_ZONECUT:
+ isc_stats_increment(cache->stats,
+ dns_cachestatscounter_queryhits);
+ break;
+ default:
+ isc_stats_increment(cache->stats,
+ dns_cachestatscounter_querymisses);
+ }
+}
+
/*
* XXX: Much of the following code has been copied in from statschannel.c.
* We should refactor this into a generic function in stats.c that can be