Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
md_config_t::
~md_config_t()
{
+ remove_observer(_prof_logger_conf_obs);
+ remove_observer(_doss);
+
free(_doss);
_doss = NULL;
free(_prof_logger_conf_obs);
}
}
+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<std::string> &conf_files,
std::deque<std::string> *parse_errors)
// 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<std::string> &conf_files,
std::deque<std::string> *parse_errors);