From 75a3d24e85c179bd0da62867c5c3b9c597d2234b Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 12 Jan 2016 20:34:41 -0500 Subject: [PATCH] config: avoid re-entrant locking on observer callback Signed-off-by: Jason Dillaman --- src/common/config.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/common/config.cc b/src/common/config.cc index 4ee54bb59adb9..531bd6c52544d 100644 --- a/src/common/config.cc +++ b/src/common/config.cc @@ -616,17 +616,21 @@ void md_config_t::_apply_changes(std::ostream *oss) void md_config_t::call_all_observers() { - Mutex::Locker l(lock); + std::map > obs; + { + Mutex::Locker l(lock); - expand_all_meta(); + expand_all_meta(); - std::map > obs; - for (obs_map_t::iterator r = observers.begin(); r != observers.end(); ++r) - obs[r->second].insert(r->first); + for (obs_map_t::iterator r = observers.begin(); r != observers.end(); ++r) { + obs[r->second].insert(r->first); + } + } for (std::map >::iterator p = obs.begin(); p != obs.end(); - ++p) + ++p) { p->first->handle_conf_change(this, p->second); + } } int md_config_t::injectargs(const std::string& s, std::ostream *oss) -- 2.39.5