From 573a49afcc1a146f9776a7a772d87efd9db77657 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 8 Jun 2015 12:21:51 +0200 Subject: [PATCH] [mc] Make Snapshot::to_ignore a std::vector --- src/mc/mc_checkpoint.cpp | 25 ++++++++++--------------- src/mc/mc_compare.cpp | 2 +- src/mc/mc_diff.cpp | 33 +++++++++++++++++---------------- src/mc/mc_snapshot.cpp | 2 -- src/mc/mc_snapshot.h | 6 +++++- 5 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index 51b9e586f2..d420aa9aee 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -477,31 +477,26 @@ static xbt_dynar_t MC_take_snapshot_stacks(mc_snapshot_t * snapshot) } -static xbt_dynar_t MC_take_snapshot_ignore() +static std::vector MC_take_snapshot_ignore() { + std::vector res; if (mc_heap_comparison_ignore == NULL) - return NULL; - - xbt_dynar_t cpy = - xbt_dynar_new(sizeof(mc_heap_ignore_region_t), - heap_ignore_region_free_voidp); + return std::move(res); unsigned int cursor = 0; mc_heap_ignore_region_t current_region; xbt_dynar_foreach(mc_heap_comparison_ignore, cursor, current_region) { - mc_heap_ignore_region_t new_region = NULL; - new_region = xbt_new0(s_mc_heap_ignore_region_t, 1); - new_region->address = current_region->address; - new_region->size = current_region->size; - new_region->block = current_region->block; - new_region->fragment = current_region->fragment; - xbt_dynar_push(cpy, &new_region); + s_mc_heap_ignore_region_t new_region; + new_region.address = current_region->address; + new_region.size = current_region->size; + new_region.block = current_region->block; + new_region.fragment = current_region->fragment; + res.push_back(std::move(new_region)); } - return cpy; - + return std::move(res); } static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot) diff --git a/src/mc/mc_compare.cpp b/src/mc/mc_compare.cpp index 356a1ec2db..d43907adf9 100644 --- a/src/mc/mc_compare.cpp +++ b/src/mc/mc_compare.cpp @@ -499,7 +499,7 @@ int snapshot_compare(void *state1, void *state2) alloca(sizeof(struct mdesc)), sizeof(struct mdesc), remote(process->heap_address), simgrid::mc::ProcessIndexMissing, simgrid::mc::AddressSpace::Lazy); - res_init = init_heap_information(heap1, heap2, s1->to_ignore, s2->to_ignore); + res_init = init_heap_information(heap1, heap2, &s1->to_ignore, &s2->to_ignore); if (res_init == -1) { #ifdef MC_DEBUG XBT_DEBUG("(%d - %d) Different heap information", num1, num2); diff --git a/src/mc/mc_diff.cpp b/src/mc/mc_diff.cpp index a037f849c7..35e8779f62 100644 --- a/src/mc/mc_diff.cpp +++ b/src/mc/mc_diff.cpp @@ -148,7 +148,8 @@ struct s_mc_diff { size_t heaplimit; // Number of blocks in the heaps: size_t heapsize1, heapsize2; - xbt_dynar_t to_ignore1, to_ignore2; + std::vector* to_ignore1; + std::vector* to_ignore2; s_heap_area_t *equals_to1, *equals_to2; dw_type_t *types1, *types2; size_t available; @@ -229,25 +230,20 @@ static int add_heap_area_pair(xbt_dynar_t list, int block1, int fragment1, return 0; } -static ssize_t heap_comparison_ignore_size(xbt_dynar_t ignore_list, +static ssize_t heap_comparison_ignore_size(std::vector* ignore_list, const void *address) { - - unsigned int cursor = 0; int start = 0; - int end = xbt_dynar_length(ignore_list) - 1; - mc_heap_ignore_region_t region; + int end = ignore_list->size() - 1; while (start <= end) { - cursor = (start + end) / 2; - region = - (mc_heap_ignore_region_t) xbt_dynar_get_as(ignore_list, cursor, - mc_heap_ignore_region_t); - if (region->address == address) - return region->size; - if (region->address < address) + unsigned int cursor = (start + end) / 2; + s_mc_heap_ignore_region_t region = (*ignore_list)[cursor]; + if (region.address == address) + return region.size; + if (region.address < address) start = cursor + 1; - if (region->address > address) + if (region.address > address) end = cursor - 1; } @@ -347,8 +343,11 @@ static int equal_fragments(struct s_mc_diff *state, int b1, int f1, int b2, return 0; } -int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t i1, - xbt_dynar_t i2) +} + +int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, + std::vector* i1, + std::vector* i2) { if (mc_diff_info == NULL) { mc_diff_info = xbt_new0(struct s_mc_diff, 1); @@ -409,6 +408,8 @@ int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t i1, } +extern "C" { + void reset_heap_information() { diff --git a/src/mc/mc_snapshot.cpp b/src/mc/mc_snapshot.cpp index ce9b138c04..54f07bab33 100644 --- a/src/mc/mc_snapshot.cpp +++ b/src/mc/mc_snapshot.cpp @@ -163,7 +163,6 @@ Snapshot::Snapshot() : privatization_index(0), stack_sizes(), stacks(nullptr), - to_ignore(nullptr), hash(0) { @@ -176,7 +175,6 @@ Snapshot::~Snapshot() } xbt_free(this->snapshot_regions); xbt_dynar_free(&(this->stacks)); - xbt_dynar_free(&(this->to_ignore)); } const void* Snapshot::read_bytes(void* buffer, std::size_t size, diff --git a/src/mc/mc_snapshot.h b/src/mc/mc_snapshot.h index 0bb55bceb0..1a58db855d 100644 --- a/src/mc/mc_snapshot.h +++ b/src/mc/mc_snapshot.h @@ -146,7 +146,7 @@ public: // To be private int privatization_index; std::vector stack_sizes; xbt_dynar_t stacks; - xbt_dynar_t to_ignore; + std::vector to_ignore; uint64_t hash; std::vector ignored_data; std::vector current_fds; @@ -248,4 +248,8 @@ void* MC_region_read_pointer(mc_mem_region_t region, const void* addr) SG_END_DECL() +XBT_INTERNAL int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, + std::vector* i1, + std::vector* i2); + #endif -- 2.20.1