X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/590f9c7e65ce6a64705272d79443599877d5cb72..84a2f5ddbda71c2f310fd6a36e6f51a79d92e413:/src/xbt/mmalloc/mm_legacy.c diff --git a/src/xbt/mmalloc/mm_legacy.c b/src/xbt/mmalloc/mm_legacy.c index 103d93d6aa..82da344a4d 100644 --- a/src/xbt/mmalloc/mm_legacy.c +++ b/src/xbt/mmalloc/mm_legacy.c @@ -10,6 +10,8 @@ static void *__mmalloc_current_heap=NULL; /* The heap we are currently using. */ +#include "xbt_modinter.h" + void* mmalloc_get_current_heap(void) { return __mmalloc_current_heap; } @@ -17,9 +19,11 @@ void mmalloc_set_current_heap(void *new_heap) { __mmalloc_current_heap=new_heap; } -#define MMALLOC_WANT_OVERIDE_LEGACY /* comment this when stuff goes horribly bad around memory allocation */ #ifdef MMALLOC_WANT_OVERIDE_LEGACY void *malloc(size_t n) { +#ifdef HAVE_MMAP + if (!__mmalloc_current_heap) mmalloc_preinit(); +#endif void *ret = mmalloc(__mmalloc_current_heap, n); return ret; @@ -27,7 +31,9 @@ void *malloc(size_t n) { void *calloc(size_t nmemb, size_t size) { size_t total_size = nmemb * size; - +#ifdef HAVE_MMAP + if (!__mmalloc_current_heap) mmalloc_preinit(); +#endif void *ret = mmalloc(__mmalloc_current_heap, total_size); /* Fill the allocated memory with zeroes to mimic calloc behaviour */ @@ -38,15 +44,17 @@ void *calloc(size_t nmemb, size_t size) { void *realloc(void *p, size_t s) { void *ret = NULL; - +#ifdef HAVE_MMAP + if (!__mmalloc_current_heap) mmalloc_preinit(); +#endif if (s) { - if (p) - ret = mrealloc(__mmalloc_current_heap, p,s); - else - ret = mmalloc(__mmalloc_current_heap,s); + if (p) + ret = mrealloc(__mmalloc_current_heap, p,s); + else + ret = mmalloc(__mmalloc_current_heap,s); } else { - if (p) - mfree(__mmalloc_current_heap,p); + if (p) + mfree(__mmalloc_current_heap,p); } return ret; @@ -67,9 +75,8 @@ void *mmalloc_get_default_md(void) { } /* Initialize the default malloc descriptor. */ -#include "xbt_modinter.h" void mmalloc_preinit(void) { - __mmalloc_default_mdp = mmalloc_attach(-1, (char *)sbrk(0) + HEAP_OFFSET); + if(!__mmalloc_default_mdp) __mmalloc_default_mdp = mmalloc_attach(-1, (char *)sbrk(0) + HEAP_OFFSET); xbt_assert(__mmalloc_default_mdp != NULL); } void mmalloc_postexit(void) {