From 527ecd4d0af52d0d7e8e3ff9a3118bcefb8359fe Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Wed, 20 Apr 2011 13:35:32 -0700 Subject: [PATCH] config: add remove_observer Signed-off-by: Colin McCabe --- src/common/config.cc | 19 +++++++++++++++++++ src/common/config.h | 7 +++++++ 2 files changed, 26 insertions(+) diff --git a/src/common/config.cc b/src/common/config.cc index 24cd1156afb19..d90fb8d78d0c5 100644 --- a/src/common/config.cc +++ b/src/common/config.cc @@ -464,6 +464,9 @@ md_config_t() md_config_t:: ~md_config_t() { + remove_observer(_prof_logger_conf_obs); + remove_observer(_doss); + free(_doss); _doss = NULL; free(_prof_logger_conf_obs); @@ -480,6 +483,22 @@ add_observer(md_config_obs_t* observer_) } } +void md_config_t:: +remove_observer(md_config_obs_t* observer_) +{ + bool found_obs = false; + for (obs_map_t::iterator o = observers.begin(); o != observers.end(); ) { + if (o->second == observer_) { + observers.erase(o++); + found_obs = true; + } + else { + ++o; + } + } + assert(found_obs); +} + int md_config_t:: parse_config_files(const std::list &conf_files, std::deque *parse_errors) diff --git a/src/common/config.h b/src/common/config.h index 93565f19f4dcc..3d57fa6efea74 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -66,6 +66,13 @@ public: // The caller is responsible for allocating observers. void add_observer(md_config_obs_t* observer_); + // Remove an observer from this configuration. + // This doesn't delete the observer! If you allocated it with new(), + // you need to delete it yourself. + // This function will assert if you try to delete an observer that isn't + // there. + void remove_observer(md_config_obs_t* observer_); + // Parse a config file int parse_config_files(const std::list &conf_files, std::deque *parse_errors); -- 2.39.5