Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
destroy the config set each time we allocate it
authorMartin Quinson <martin.quinson@loria.fr>
Thu, 25 Aug 2016 15:39:11 +0000 (17:39 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Thu, 25 Aug 2016 15:39:11 +0000 (17:39 +0200)
src/simgrid/sg_config.cpp
src/surf/surf_interface.cpp
src/xbt/config.cpp

index 6b55477..62693e8 100644 (file)
@@ -382,8 +382,8 @@ static void describe_model(char *result,int resultsize,
 /* create the config set, register what should be and parse the command line*/
 void sg_config_init(int *argc, char **argv)
 {
-  int descsize = 1024;
-  char description[1024];
+  const int descsize = 1024;
+  char description[descsize];
 
   /* Create the configuration support */
   if (_sg_cfg_init_status == 0) { /* Only create stuff if not already inited */
index ac01f27..56845e3 100644 (file)
@@ -325,8 +325,6 @@ void surf_exit()
 {
   TRACE_end();                  /* Just in case it was not called by the upper layer (or there is no upper layer) */
 
-  sg_config_finalize();
-
   xbt_dynar_free(&surf_path);
 
   xbt_dict_free(&host_list);
index 49fe4a8..814ec46 100644 (file)
@@ -30,6 +30,9 @@
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_cfg, xbt, "configuration support");
 
 XBT_EXPORT_NO_IMPORT(xbt_cfg_t) simgrid_config = nullptr;
+extern "C" {
+  XBT_PUBLIC(void) sg_config_finalize();
+}
 
 namespace simgrid {
 namespace config {
@@ -448,8 +451,10 @@ template<class T>
 XBT_PUBLIC(void) declareFlag(const char* name, const char* description,
   T value, std::function<void(const T&)> callback)
 {
-  if (simgrid_config == nullptr)
+  if (simgrid_config == nullptr) {
     simgrid_config = xbt_cfg_new();
+    atexit(sg_config_finalize);
+  }
   simgrid_config->registerOption<T>(
     name, description, std::move(value), std::move(callback));
 }
@@ -488,30 +493,38 @@ void xbt_cfg_register_double(const char *name, double default_value,
 
 void xbt_cfg_register_int(const char *name, int default_value,xbt_cfg_cb_t cb_set, const char *desc)
 {
-  if (simgrid_config == nullptr)
+  if (simgrid_config == nullptr) {
     simgrid_config = xbt_cfg_new();
+    atexit(&sg_config_finalize);
+  }
   simgrid_config->registerOption<int>(name, desc, default_value, cb_set);
 }
 
 void xbt_cfg_register_string(const char *name, const char *default_value, xbt_cfg_cb_t cb_set, const char *desc)
 {
-  if (simgrid_config == nullptr)
+  if (simgrid_config == nullptr) {
     simgrid_config = xbt_cfg_new();
+    atexit(sg_config_finalize);
+  }
   simgrid_config->registerOption<std::string>(name, desc,
     default_value ? default_value : "", cb_set);
 }
 
 void xbt_cfg_register_boolean(const char *name, const char*default_value,xbt_cfg_cb_t cb_set, const char *desc)
 {
-  if (simgrid_config == nullptr)
+  if (simgrid_config == nullptr) {
     simgrid_config = xbt_cfg_new();
+    atexit(sg_config_finalize);
+  }
   simgrid_config->registerOption<bool>(name, desc, simgrid::config::parseBool(default_value), cb_set);
 }
 
 void xbt_cfg_register_alias(const char *realname, const char *aliasname)
 {
-  if (simgrid_config == nullptr)
+  if (simgrid_config == nullptr) {
     simgrid_config = xbt_cfg_new();
+    atexit(sg_config_finalize);
+  }
   simgrid_config->alias(realname, aliasname);
 }