From: Remi Gacogne Date: Mon, 6 Feb 2023 09:07:04 +0000 (+0100) Subject: ixfrdist: Make sure that our metrics are properly initialized X-Git-Tag: dnsdist-1.8.0-rc1~46^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=de9fbd402dc05263e8ddb2e6ffc09b5cf01bef1e;p=thirdparty%2Fpdns.git ixfrdist: Make sure that our metrics are properly initialized Before C++20 std::atomic variables are not guaranteed to be initialized, even though it looks like compilers are actually doing the initialization even in C++17. Reported by Coverity as CID 1504405. --- diff --git a/pdns/ixfrdist-stats.hh b/pdns/ixfrdist-stats.hh index 26a27be60f..74d0344d05 100644 --- a/pdns/ixfrdist-stats.hh +++ b/pdns/ixfrdist-stats.hh @@ -71,22 +71,22 @@ class ixfrdistStats { class perDomainStat { public: bool haveZone; - std::atomic currentSOA; // NOTE: this will wrongly be zero for unavailable zones + std::atomic currentSOA{0}; // NOTE: this will wrongly be zero for unavailable zones - std::atomic numSOAChecks; - std::atomic numSOAChecksFailed; + std::atomic numSOAChecks{0}; + std::atomic numSOAChecksFailed{0}; - std::atomic numSOAinQueries; - std::atomic numAXFRinQueries; - std::atomic numIXFRinQueries; + std::atomic numSOAinQueries{0}; + std::atomic numAXFRinQueries{0}; + std::atomic numIXFRinQueries{0}; - std::atomic numAXFRFailures; - std::atomic numIXFRFailures; + std::atomic numAXFRFailures{0}; + std::atomic numIXFRFailures{0}; }; class programStats { public: time_t startTime; - std::atomic unknownDomainInQueries; + std::atomic unknownDomainInQueries{0}; }; std::map domainStats; diff --git a/regression-tests.ixfrdist/test_Stats.py b/regression-tests.ixfrdist/test_Stats.py index 61b272bacd..0fcf1e367e 100644 --- a/regression-tests.ixfrdist/test_Stats.py +++ b/regression-tests.ixfrdist/test_Stats.py @@ -72,8 +72,12 @@ webserver-address: %s continue if "{" in line: continue - self.assertIn(line.split(" ")[0], + tokens = line.split(" ") + self.assertIn(tokens[0], self.metric_prog_stats + self.metric_domain_stats) + if tokens[0] == 'ixfrdist_unknown_domain_inqueries_total': + self.assertEqual(int(tokens[1]), 0) + self.checkPrometheusContentPromtool(res.content) def test_registered(self):