Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
more informative error messages on errors within mmalloc
[simgrid.git] / src / xbt / mmalloc / mm_legacy.c
index d6df507..e9fcb20 100644 (file)
@@ -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);
@@ -139,13 +143,15 @@ 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);
     /* 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);
 }