Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Proper module use count to plug a (tiny) memleak
[simgrid.git] / src / xbt / module.c
index 32dc9ad..652b0c7 100644 (file)
@@ -18,6 +18,9 @@
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(module,xbt, "module handling");
 
+char *xbt_binary_name=NULL; /* Mandatory to retrieve neat backtraces */
+int xbt_initialized=0;
+
 struct xbt_module_ {
   xbt_dynar_t *deps;
   xbt_cfg_t *cfg;
@@ -29,11 +32,12 @@ struct xbt_module_ {
 /** @brief Initialize the xbt mechanisms. */
 void 
 xbt_init(int *argc, char **argv) {
-  static short int first_run = 1;
-  if (!first_run)
+  xbt_initialized++;
+
+  if (xbt_initialized!=1)
     return;
-  
-  first_run = 0;
+
+  xbt_binary_name = strdup(argv[0]);
   VERB0("Initialize XBT");
   
   xbt_log_init(argc,argv);
@@ -42,6 +46,9 @@ xbt_init(int *argc, char **argv) {
 /** @brief Finalize the xbt mechanisms. */
 void 
 xbt_exit(){
+  xbt_initialized--;
+  if (xbt_initialized == 0)
+     free(xbt_binary_name);
   xbt_log_exit();
 }