X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/df740d05eb82dc5c7af785e0967db186f9ea194c..84402e8e2ee2a2d0bef25fdceb0a263ed8b471f6:/src/xbt/mmalloc/mm_module.c diff --git a/src/xbt/mmalloc/mm_module.c b/src/xbt/mmalloc/mm_module.c index 98a704111e..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-2019. 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,6 +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); + + // 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); @@ -334,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. @@ -356,22 +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]; - } - -}