Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix MC on FreeBSD
[simgrid.git] / src / xbt / mmalloc / mm_module.c
index 6c04fdf..9f96095 100644 (file)
@@ -1,6 +1,6 @@
 /* Initialization for acces s to a mmap'd malloc managed region. */
 
 /* Initialization for acces s to a mmap'd malloc managed region. */
 
-/* Copyright (c) 2012-2014. The SimGrid Team.
+/* Copyright (c) 2012-2019. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -324,12 +324,10 @@ void *mmalloc_preinit(void)
     unsigned long mask = ~((unsigned long)xbt_pagesize - 1);
     void *addr = (void*)(((unsigned long)sbrk(0) + HEAP_OFFSET) & mask);
     __mmalloc_default_mdp = xbt_mheap_new_options(-1, addr, XBT_MHEAP_OPTION_MEMSET);
     unsigned long mask = ~((unsigned long)xbt_pagesize - 1);
     void *addr = (void*)(((unsigned long)sbrk(0) + HEAP_OFFSET) & mask);
     __mmalloc_default_mdp = xbt_mheap_new_options(-1, addr, XBT_MHEAP_OPTION_MEMSET);
-    /* Fixme? only the default mdp in protected against forks */
-    // This is mandated to protect the mmalloced areas through forks. Think of tesh.
-    // Nah, removing the mutex isn't a good idea either for tesh
-    int 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);
+
+    // atfork mandated at least on FreeBSD, or simgrid-mc will fail to fork the verified app
+    int res = pthread_atfork(mmalloc_fork_prepare, mmalloc_fork_parent, mmalloc_fork_child);
+    xbt_assert(res == 0, "pthread_atfork() failed: return value %d", res);
   }
   xbt_assert(__mmalloc_default_mdp != NULL);
 
   }
   xbt_assert(__mmalloc_default_mdp != NULL);
 
@@ -381,32 +379,3 @@ ssize_t mmalloc_get_busy_size(xbt_mheap_t heap, void *ptr){
   }
 
 }
   }
 
 }
-
-void mmcheck(xbt_mheap_t heap) {return;
-  if (!heap->heapinfo)
-    return;
-  malloc_info* heapinfo = NULL;
-  for (size_t i=1; i < heap->heaplimit; i += mmalloc_get_increment(heapinfo)) {
-    heapinfo = heap->heapinfo + i;
-    switch (heapinfo->type) {
-    case MMALLOC_TYPE_HEAPINFO:
-    case MMALLOC_TYPE_FREE:
-      if (heapinfo->free_block.size==0) {
-        xbt_die("Block size == 0");
-      }
-      break;
-    case MMALLOC_TYPE_UNFRAGMENTED:
-      if (heapinfo->busy_block.size==0) {
-        xbt_die("Block size == 0");
-      }
-      if (heapinfo->busy_block.busy_size==0 && heapinfo->busy_block.size!=0) {
-        xbt_die("Empty busy block");
-      }
-      break;
-    default:
-      if (heapinfo->type<0) {
-        xbt_die("Unkown mmalloc block type.");
-      }
-    }
-  }
-}