X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/07c319ec54d6fc778ee3cc5e75a747242006723e..5f6cef8bdac64b84b4886b2f2c6a89b65763dc09:/src/xbt/mmalloc/mm_legacy.c diff --git a/src/xbt/mmalloc/mm_legacy.c b/src/xbt/mmalloc/mm_legacy.c index d6df507dee..2bced98dd1 100644 --- a/src/xbt/mmalloc/mm_legacy.c +++ b/src/xbt/mmalloc/mm_legacy.c @@ -7,6 +7,7 @@ /* Redefine the classical malloc/free/realloc functions so that they fit well in the mmalloc framework */ #include "mmprivate.h" +#include "gras_config.h" static void *__mmalloc_current_heap = NULL; /* The heap we are currently using. */ @@ -81,6 +82,9 @@ void *realloc(void *p, size_t s) void free(void *p) { void *mdp = __mmalloc_current_heap; +#ifdef HAVE_GTNETS + if(!mdp) return; +#endif LOCK(mdp); mfree(mdp, p); UNLOCK(mdp); @@ -89,9 +93,10 @@ void free(void *p) /* Make sure it works with md==NULL */ -#define HEAP_OFFSET (128<<20) /* Safety gap from the heap's break address. - * Try to increase this first if you experience - * strange errors under valgrind. */ +/* Safety gap from the heap's break address. + * Try to increase this first if you experience strange errors under + * valgrind. */ +#define HEAP_OFFSET (128UL<<20) void *mmalloc_get_default_md(void) { @@ -139,13 +144,16 @@ static void mmalloc_fork_child(void) /* Initialize the default malloc descriptor. */ void mmalloc_preinit(void) { + int res; if (!__mmalloc_default_mdp) { - __mmalloc_default_mdp = - mmalloc_attach(-1, (char *) sbrk(0) + HEAP_OFFSET); + unsigned long mask = ~((unsigned long)getpagesize() - 1); + void *addr = (void*)(((unsigned long)sbrk(0) + HEAP_OFFSET) & mask); + __mmalloc_default_mdp = mmalloc_attach(-1, addr); /* Fixme? only the default mdp in protected against forks */ - if (xbt_os_thread_atfork(mmalloc_fork_prepare, - mmalloc_fork_parent, mmalloc_fork_child) != 0) - abort(); + res = xbt_os_thread_atfork(mmalloc_fork_prepare, + mmalloc_fork_parent, mmalloc_fork_child); + if (res != 0) + THROWF(system_error,0,"xbt_os_thread_atfork() failed: return value %d",res); } xbt_assert(__mmalloc_default_mdp != NULL); }