X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e2b455e834089e4512c6311872052ba441b487ec..84402e8e2ee2a2d0bef25fdceb0a263ed8b471f6:/src/xbt/mmalloc/mm_module.c diff --git a/src/xbt/mmalloc/mm_module.c b/src/xbt/mmalloc/mm_module.c index 6c04fdfa84..8fa77c3035 100644 --- a/src/xbt/mmalloc/mm_module.c +++ b/src/xbt/mmalloc/mm_module.c @@ -1,6 +1,6 @@ -/* Initialization for acces s to a mmap'd malloc managed region. */ +/* Initialization for access to a mmap'd malloc managed region. */ -/* Copyright (c) 2012-2014. The SimGrid Team. +/* Copyright (c) 2012-2020. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -62,7 +62,7 @@ starting at the specified address BASEADDR in the process address space. - The provided BASEADDR should be choosed carefully in order to avoid + The provided BASEADDR should be chosen carefully in order to avoid bumping into existing mapped regions or future mapped regions. On success, returns a "malloc descriptor" which is used in subsequent @@ -272,12 +272,6 @@ void *xbt_mheap_destroy(xbt_mheap_t mdp) * Try to increase this first if you experience strange errors under valgrind. */ #define HEAP_OFFSET (128UL<<20) -xbt_mheap_t mmalloc_get_default_md(void) -{ - xbt_assert(__mmalloc_default_mdp); - return __mmalloc_default_mdp; -} - static void mmalloc_fork_prepare(void) { xbt_mheap_t mdp = NULL; @@ -324,12 +318,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); - /* 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); @@ -340,7 +332,7 @@ void mmalloc_postexit(void) { /* Do not destroy the default mdp or ldl won't be able to free the memory it * allocated since we're in memory */ - // xbt_mheap_destroy_no_free(__mmalloc_default_mdp); + // xbt_mheap_destroy_no_free(__mmalloc_default_mdp) } // This is the underlying implementation of mmalloc_get_bytes_used_remote. @@ -362,51 +354,3 @@ size_t mmalloc_get_bytes_used_remote(size_t heaplimit, const malloc_info* heapin } return bytes; } - -size_t mmalloc_get_bytes_used(const xbt_mheap_t heap){ - const struct mdesc* heap_data = (const struct mdesc *) heap; - return mmalloc_get_bytes_used_remote(heap_data->heaplimit, heap_data->heapinfo); -} - -ssize_t mmalloc_get_busy_size(xbt_mheap_t heap, void *ptr){ - - ssize_t block = ((char*)ptr - (char*)(heap->heapbase)) / BLOCKSIZE + 1; - if(heap->heapinfo[block].type < 0) - return -1; - else if(heap->heapinfo[block].type == MMALLOC_TYPE_UNFRAGMENTED) - return heap->heapinfo[block].busy_block.busy_size; - else{ - ssize_t frag = ((uintptr_t) (ADDR2UINT (ptr) % (BLOCKSIZE))) >> heap->heapinfo[block].type; - return heap->heapinfo[block].busy_frag.frag_size[frag]; - } - -} - -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."); - } - } - } -}