Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Need to have the HAVE_MMAP variable.
[simgrid.git] / src / xbt / xbt_main.c
index a9a71f8..6f5688f 100644 (file)
@@ -7,6 +7,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "xbt/misc.h"
+#include "simgrid_config.h"            /*HAVE_MMAP*/
 #include "time.h"               /* to seed the random generator */
 
 #include "xbt/sysdep.h"
@@ -57,7 +58,7 @@ static void xbt_postexit(void) _XBT_GNUC_DESTRUCTOR;
 #pragma fini (xbt_postexit)
 #endif
 
-#ifdef WIN32
+#ifdef _XBT_WIN32
 #include <windows.h>
 
 /* Dummy prototype to make gcc happy */
@@ -79,6 +80,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
 #endif
 
 static void xbt_preinit(void) {
+       #ifdef HAVE_MMAP
+         mmalloc_preinit();
+       #endif
   xbt_log_preinit();
 
   /* Connect our log channels: that must be done manually under windows */
@@ -106,6 +110,7 @@ static void xbt_preinit(void) {
   XBT_LOG_CONNECT(xbt_sync_os, xbt);
 
   xbt_fifo_preinit();
+  xbt_dict_preinit();
 
   xbt_backtrace_preinit();
   xbt_os_thread_mod_preinit();
@@ -121,14 +126,20 @@ static void xbt_postexit(void) {
   xbt_log_postexit();
 
   free(xbt_binary_name);
+#ifdef HAVE_MMAP
+  mmalloc_postexit();
+#endif
 }
 
 /** @brief Initialize the xbt mechanisms. */
 void xbt_init(int *argc, char **argv)
 {
-  xbt_assert0(xbt_initialized == 0, "xbt_init must be called only once");
+  // FIXME it would be nice to assert that this function is called only once. But each gras process do call it...
   xbt_initialized++;
 
+  if (xbt_initialized >1)
+    return;
+
   xbt_binary_name = xbt_strdup(argv[0]);
   srand((unsigned int) time(NULL));
   VERB0("Initialize XBT");