]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
config: add remove_observer
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 20 Apr 2011 20:35:32 +0000 (13:35 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 20 Apr 2011 20:38:27 +0000 (13:38 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/common/config.cc
src/common/config.h

index 24cd1156afb19ec65aeb2ae966efc35f0583e119..d90fb8d78d0c523bce8f0c059815af3ff09b9e35 100644 (file)
@@ -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<std::string> &conf_files,
                   std::deque<std::string> *parse_errors)
index 93565f19f4dccd5c62e6b206b4d8e481721cbcf4..3d57fa6efea74c6ef87250341f367af73d91102e 100644 (file)
@@ -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<std::string> &conf_files,
                         std::deque<std::string> *parse_errors);