X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1fe09f54bac3c43710f19de37bcec99cd19b92a8..a952e7b8f580680c94a08ddb1ffbc76c56ac4bc8:/src/mc/mc_global.c diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 97e31b9631..461e0b53a9 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -794,6 +794,48 @@ void MC_ignore_heap(void *address, size_t size){ MC_SET_RAW_MEM; } +void MC_remove_ignore_heap(void *address, size_t size){ + + int raw_mem_set = (mmalloc_get_current_heap() == raw_heap); + + MC_SET_RAW_MEM; + + unsigned int cursor = 0; + int start = 0; + int end = xbt_dynar_length(mc_heap_comparison_ignore) - 1; + mc_heap_ignore_region_t region; + int ignore_found = 0; + + while(start <= end){ + cursor = (start + end) / 2; + region = (mc_heap_ignore_region_t)xbt_dynar_get_as(mc_heap_comparison_ignore, cursor, mc_heap_ignore_region_t); + if(region->address == address){ + ignore_found = 1; + break; + } + if(region->address < address) + start = cursor + 1; + if(region->address > address){ + if((char * )region->address <= ((char *)address + size)){ + ignore_found = 1; + break; + }else + end = cursor - 1; + } + } + + if(ignore_found == 1){ + xbt_dynar_remove_at(mc_heap_comparison_ignore, cursor, NULL); + MC_remove_ignore_heap(address, size); + } + + MC_UNSET_RAW_MEM; + + if(raw_mem_set) + MC_SET_RAW_MEM; + +} + void MC_ignore_data_bss(void *address, size_t size){ int raw_mem_set = (mmalloc_get_current_heap() == raw_heap);