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 6a8c201..652b0c7 100644 (file)
@@ -9,7 +9,6 @@
 
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
-#include "xbt/error.h"
 #include "xbt/dynar.h"
 #include "xbt/config.h"
 
@@ -19,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;
@@ -30,25 +32,23 @@ struct xbt_module_ {
 /** @brief Initialize the xbt mechanisms. */
 void 
 xbt_init(int *argc, char **argv) {
-  xbt_init_defaultlog(argc, argv, NULL);
-}
+  xbt_initialized++;
 
-/** @brief Initialize the xbt mechanisms. */
-void
-xbt_init_defaultlog(int *argc,char **argv, const char *defaultlog) {
-  static short int first_run = 1;
-  if (!first_run)
+  if (xbt_initialized!=1)
     return;
+
+  xbt_binary_name = strdup(argv[0]);
+  VERB0("Initialize XBT");
   
-  first_run = 0;
-  INFO0("Initialize XBT");
-  
-  xbt_log_init(argc,argv,defaultlog);
+  xbt_log_init(argc,argv);
 }
 
 /** @brief Finalize the xbt mechanisms. */
 void 
 xbt_exit(){
+  xbt_initialized--;
+  if (xbt_initialized == 0)
+     free(xbt_binary_name);
   xbt_log_exit();
 }