X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d048b00742e6a2e9f0fe5d82d8e44747f34a5a8b..a2a013c0e4ca407feeb7b3d0e85abba7acae2532:/src/mc/compare.cpp?ds=sidebyside diff --git a/src/mc/compare.cpp b/src/mc/compare.cpp index 72e930ba0d..1596039cdc 100644 --- a/src/mc/compare.cpp +++ b/src/mc/compare.cpp @@ -1016,7 +1016,7 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, int new_size1 = -1, new_size2 = -1; simgrid::mc::Type *new_type1 = nullptr, *new_type2 = nullptr; - int match_pairs = 0; + bool match_pairs = false; // This is the address of std_heap->heapinfo in the application process: void* heapinfo_address = &((xbt_mheap_t) process->heap_address)->heapinfo; @@ -1028,9 +1028,10 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, malloc_info heapinfo_temp1, heapinfo_temp2; + simgrid::mc::HeapLocationPairs current; if (previous == nullptr) { - previous = new HeapLocationPairs(); - match_pairs = 1; + previous = ¤t; + match_pairs = true; } // Get block number: @@ -1045,10 +1046,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if (is_block_stack((int) block1) && is_block_stack((int) block2)) { previous->insert(simgrid::mc::makeHeapLocationPair( block1, -1, block2, -1)); - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } @@ -1057,8 +1056,6 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, || (block1 > (ssize_t) state.processStates[0].heapsize) || (block1 < 1) || ((char *) area2 < (char *) state.std_heap_copy.heapbase) || (block2 > (ssize_t) state.processStates[1].heapsize) || (block2 < 1)) { - if (match_pairs) - delete previous; return 1; } @@ -1098,10 +1095,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if ((heapinfo1->type == MMALLOC_TYPE_FREE || heapinfo1->type==MMALLOC_TYPE_HEAPINFO) && (heapinfo2->type == MMALLOC_TYPE_FREE || heapinfo2->type ==MMALLOC_TYPE_HEAPINFO)) { /* Free block */ - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } @@ -1117,10 +1112,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if (state.equals_to1_(block1, 0).valid && state.equals_to2_(block2, 0).valid && state.blocksEqual(block1, block2)) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } @@ -1128,32 +1121,21 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if (type_size != (ssize_t) heapinfo1->busy_block.busy_size && type_size != (ssize_t) heapinfo2->busy_block.busy_size && (type->name.empty() || type->name == "struct s_smx_context")) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return -1; } } - if (heapinfo1->busy_block.size != heapinfo2->busy_block.size) { - if (match_pairs) - delete previous; + if (heapinfo1->busy_block.size != heapinfo2->busy_block.size) return 1; - } - - if (heapinfo1->busy_block.busy_size != heapinfo2->busy_block.busy_size) { - if (match_pairs) - delete previous; + if (heapinfo1->busy_block.busy_size != heapinfo2->busy_block.busy_size) return 1; - } if (!previous->insert(simgrid::mc::makeHeapLocationPair( block1, -1, block2, -1)).second) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } @@ -1167,10 +1149,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, state.types2_(block2, 0) = type; if (size <= 0) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } @@ -1201,19 +1181,15 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if (type_size != -1) { if (heapinfo1->busy_frag.frag_size[frag1] == -1 || heapinfo2->busy_frag.frag_size[frag2] == -1) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return -1; } // ? if (type_size != heapinfo1->busy_frag.frag_size[frag1] || type_size != heapinfo2->busy_frag.frag_size[frag2]) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return -1; } } @@ -1222,10 +1198,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if (state.equals_to1_(block1, frag1).valid && state.equals_to2_(block2, frag2).valid) { if (offset1==offset2 && state.fragmentsEqual(block1, frag1, block2, frag2)) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } } @@ -1233,16 +1207,11 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if (heapinfo1->busy_frag.frag_size[frag1] != heapinfo2->busy_frag.frag_size[frag2]) { if (type_size == -1) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return -1; - } else { - if (match_pairs) - delete previous; + } else return 1; - } } // Size of the fragment: @@ -1290,10 +1259,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, get_offset_type(real_addr_frag2, state.types2_(block2, frag2), offset2, size, snapshot2, process_index); } else { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return -1; } @@ -1310,10 +1277,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, new_size2 = type->byte_size; } else { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return -1; } } @@ -1326,18 +1291,14 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, if (offset1 == 0 && offset2 == 0 && !previous->insert(simgrid::mc::makeHeapLocationPair( block1, frag1, block2, frag2)).second) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } if (size <= 0) { - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } return 0; } @@ -1346,11 +1307,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, heapinfo1->busy_frag.ignore[frag1])) check_ignore = heapinfo1->busy_frag.ignore[frag1]; - } else { - if (match_pairs) - delete previous; + } else return 1; - } /* Start comparison */ @@ -1364,17 +1322,11 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, compare_heap_area_without_type(state, process_index, area1, area2, snapshot1, snapshot2, previous, size, check_ignore); - if (res_compare == 1) { - if (match_pairs) - delete previous; + if (res_compare == 1) return res_compare; - } - if (match_pairs) { + if (match_pairs) state.match_equals(previous); - delete previous; - } - return 0; }