X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e102d3275d9234526b53423b8a8e5bbd68ce5891..31a999f9a0f6420f98301e553cb0e5f0c8b2a1c8:/src/mc/mc_diff.c diff --git a/src/mc/mc_diff.c b/src/mc/mc_diff.c index 5e360a2626..a9b8dd40b7 100644 --- a/src/mc/mc_diff.c +++ b/src/mc/mc_diff.c @@ -436,8 +436,8 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) mc_mem_region_t heap_region2 = snapshot2->regions[0]; // This is in snapshot do not use them directly: - malloc_info* heapinfos1 = mc_snapshot_read_pointer(&((xbt_mheap_t)std_heap)->heapinfo, snapshot1, MC_NO_PROCESS_INDEX); - malloc_info* heapinfos2 = mc_snapshot_read_pointer(&((xbt_mheap_t)std_heap)->heapinfo, snapshot2, MC_NO_PROCESS_INDEX); + malloc_info* heapinfos1 = mc_snapshot_read_pointer(&std_heap->heapinfo, snapshot1, MC_NO_PROCESS_INDEX); + malloc_info* heapinfos2 = mc_snapshot_read_pointer(&std_heap->heapinfo, snapshot2, MC_NO_PROCESS_INDEX); while (i1 <= state->heaplimit) { @@ -445,7 +445,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) malloc_info* heapinfo2 = mc_snapshot_read_region(&heapinfos2[i1], heap_region2, &heapinfo_temp2, sizeof(malloc_info)); if (heapinfo1->type == MMALLOC_TYPE_FREE || heapinfo1->type == MMALLOC_TYPE_HEAPINFO) { /* Free block */ - i1 += heapinfo1->free_block.size; + i1 ++; continue; } @@ -596,7 +596,13 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) malloc_info* heapinfo2b = mc_snapshot_read_region(&heapinfos2[i2], heap_region2, &heapinfo_temp2b, sizeof(malloc_info)); if (heapinfo2b->type == MMALLOC_TYPE_FREE || heapinfo2b->type == MMALLOC_TYPE_HEAPINFO) { - i2 += heapinfo2b->free_block.size; + i2 ++; + continue; + } + + // We currently do not match fragments with unfragmented blocks (maybe we should). + if (heapinfo2b->type == MMALLOC_TYPE_UNFRAGMENTED) { + i2++; continue; } @@ -1130,14 +1136,11 @@ int compare_heap_area(int process_index, void *area1, void *area2, mc_snapshot_t int match_pairs = 0; - malloc_info* heapinfos1 = mc_snapshot_read_pointer(&((xbt_mheap_t)std_heap)->heapinfo, snapshot1, process_index); - malloc_info* heapinfos2 = mc_snapshot_read_pointer(&((xbt_mheap_t)std_heap)->heapinfo, snapshot2, process_index); + malloc_info* heapinfos1 = mc_snapshot_read_pointer(&std_heap->heapinfo, snapshot1, process_index); + malloc_info* heapinfos2 = mc_snapshot_read_pointer(&std_heap->heapinfo, snapshot2, process_index); malloc_info heapinfo_temp1, heapinfo_temp2; - void* real_area1_to_compare = area1; - void* real_area2_to_compare = area2; - if (previous == NULL) { previous = xbt_dynar_new(sizeof(heap_area_pair_t), heap_area_pair_free_voidp);