From: Martin Quinson Date: Thu, 25 Aug 2016 15:39:11 +0000 (+0200) Subject: destroy the config set each time we allocate it X-Git-Tag: v3_14~485 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/e1fb4479b32e4d0122ba74b1ad0eeb4520e8d7a1?ds=sidebyside destroy the config set each time we allocate it --- diff --git a/src/simgrid/sg_config.cpp b/src/simgrid/sg_config.cpp index 6b5547737a..62693e86a8 100644 --- a/src/simgrid/sg_config.cpp +++ b/src/simgrid/sg_config.cpp @@ -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 */ diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index ac01f2715a..56845e3ee3 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -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); diff --git a/src/xbt/config.cpp b/src/xbt/config.cpp index 49fe4a815b..814ec46182 100644 --- a/src/xbt/config.cpp +++ b/src/xbt/config.cpp @@ -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 XBT_PUBLIC(void) declareFlag(const char* name, const char* description, T value, std::function callback) { - if (simgrid_config == nullptr) + if (simgrid_config == nullptr) { simgrid_config = xbt_cfg_new(); + atexit(sg_config_finalize); + } simgrid_config->registerOption( 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(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(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(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); }