From: Marion Guthmuller Date: Wed, 1 Aug 2012 20:42:47 +0000 (+0200) Subject: model-checker : sort ignore list and dichotomic search X-Git-Tag: v3_8~224 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/fa02213cffba5b63cb6ee145dda085a4e4401407 model-checker : sort ignore list and dichotomic search --- diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 0d58509838..d91af1451a 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -646,11 +646,22 @@ void MC_ignore_init(){ } void MC_ignore(void *address, size_t size){ + MC_SET_RAW_MEM; + mc_ignore_region_t region = NULL; region = xbt_new0(s_mc_ignore_region_t, 1); region->address = address; region->size = size; - xbt_dynar_push(mmalloc_ignore, ®ion); + + unsigned int cursor = 0; + mc_ignore_region_t current_region; + xbt_dynar_foreach(mmalloc_ignore, cursor, current_region){ + if(current_region->address > address) + break; + } + + xbt_dynar_insert_at(mmalloc_ignore, cursor, ®ion); + MC_UNSET_RAW_MEM; } diff --git a/src/xbt/mmalloc/mm_diff.c b/src/xbt/mmalloc/mm_diff.c index 1399808a33..8098a95dc0 100644 --- a/src/xbt/mmalloc/mm_diff.c +++ b/src/xbt/mmalloc/mm_diff.c @@ -356,11 +356,21 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2){ static size_t heap_comparison_ignore(void *address){ unsigned int cursor = 0; + int start = 0; + int end = xbt_dynar_length(mmalloc_ignore) - 1; mc_ignore_region_t region; - xbt_dynar_foreach(mmalloc_ignore, cursor, region){ + + while(start <= end){ + cursor = (start + end) / 2; + region = (mc_ignore_region_t)xbt_dynar_get_as(mmalloc_ignore, cursor, mc_ignore_region_t); if(region->address == address) return region->size; + if(region->address < address) + start = cursor + 1; + if(region->address > address) + end = cursor - 1; } + return 0; }