X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a5afaee62be6661d36a8d42cb727d28833d17d7e..8999903f751a21a2e3b9efd41aeccb94bae15e4d:/src/xbt/xbt_main.c diff --git a/src/xbt/xbt_main.c b/src/xbt/xbt_main.c index a9a71f8908..978302147a 100644 --- a/src/xbt/xbt_main.c +++ b/src/xbt/xbt_main.c @@ -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 _XBT_WIN32*/ #include "time.h" /* to seed the random generator */ #include "xbt/sysdep.h" @@ -52,12 +53,17 @@ XBT_LOG_EXTERNAL_CATEGORY(xbt_sync_os); */ static void xbt_preinit(void) _XBT_GNUC_CONSTRUCTOR; static void xbt_postexit(void) _XBT_GNUC_DESTRUCTOR; + +#ifdef _XBT_WIN32 + # undef _XBT_NEED_INIT_PRAGMA +#endif + #ifdef _XBT_NEED_INIT_PRAGMA #pragma init (xbt_preinit) #pragma fini (xbt_postexit) #endif -#ifdef WIN32 +#ifdef _XBT_WIN32 #include /* Dummy prototype to make gcc happy */ @@ -79,6 +85,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 +115,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 +131,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");