From 13bf97469d960aa8c45f2101ec4aef39db4e4023 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Thu, 20 May 2021 08:38:59 +0200 Subject: [PATCH] rec: Convert the dynmetrics to LockGuarded --- pdns/rec_channel_rec.cc | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/pdns/rec_channel_rec.cc b/pdns/rec_channel_rec.cc index 17dff3c155..b8231e4ab5 100644 --- a/pdns/rec_channel_rec.cc +++ b/pdns/rec_channel_rec.cc @@ -79,13 +79,12 @@ static map*> d_getatomics; static map> d_get64bitmembers; static map> d_getmultimembers; -static std::mutex d_dynmetricslock; struct dynmetrics { std::atomic *d_ptr; std::string d_prometheusName; }; -static map d_dynmetrics; +static LockGuarded> d_dynmetrics; static std::map> s_disabledStats; @@ -139,10 +138,11 @@ static std::string getPrometheusName(const std::string& arg) std::atomic* getDynMetric(const std::string& str, const std::string& prometheusName) { - std::lock_guard l(d_dynmetricslock); - auto f = d_dynmetrics.find(str); - if(f != d_dynmetrics.end()) + auto dm = d_dynmetrics.lock(); + auto f = dm->find(str); + if (f != dm->end()) { return f->second.d_ptr; + } std::string name(str); if (!prometheusName.empty()) { @@ -152,7 +152,7 @@ std::atomic* getDynMetric(const std::string& str, const std::stri } auto ret = dynmetrics{new std::atomic(), name}; - d_dynmetrics[str]= ret; + (*dm)[str]= ret; return ret.d_ptr; } @@ -167,10 +167,13 @@ static boost::optional get(const string& name) if(d_get64bitmembers.count(name)) return d_get64bitmembers.find(name)->second(); - std::lock_guard l(d_dynmetricslock); - auto f = rplookup(d_dynmetrics, name); - if (f) - return f->d_ptr->load(); + { + auto dm = d_dynmetrics.lock(); + auto f = rplookup(*dm, name); + if (f) { + return f->d_ptr->load(); + } + } for(const auto& themultimember : d_getmultimembers) { const auto items = themultimember.second(); @@ -217,8 +220,7 @@ StatsMap getAllStatsMap(StatComponent component) } { - std::lock_guard l(d_dynmetricslock); - for(const auto& a : d_dynmetrics) { + for(const auto& a : *(d_dynmetrics.lock())) { if (disabledlistMap.count(a.first) == 0) { ret.insert(make_pair(a.first, StatsMapEntry{a.second.d_prometheusName, std::to_string(*a.second.d_ptr)})); } -- 2.47.2