X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a5768f8725f95079064178fcbb020eea94ae19b7..573a49afcc1a146f9776a7a772d87efd9db77657:/src/mc/mc_checkpoint.cpp diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index 29a631822d..d420aa9aee 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -477,54 +477,42 @@ 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; - -} - -static void mc_free_snapshot_ignored_data_pvoid(void* data) { - mc_snapshot_ignored_data_t ignored_data = (mc_snapshot_ignored_data_t) data; - free(ignored_data->data); + return std::move(res); } static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot) { xbt_assert(snapshot->process); - snapshot->ignored_data = xbt_dynar_new(sizeof(s_mc_snapshot_ignored_data_t), mc_free_snapshot_ignored_data_pvoid); - + // Copy the memory: for (auto const& region : mc_model_checker->process().ignored_regions()) { s_mc_snapshot_ignored_data_t ignored_data; ignored_data.start = (void*)region.addr; - ignored_data.size = region.size; - ignored_data.data = malloc(region.size); + ignored_data.data.resize(region.size); // TODO, we should do this once per privatization segment: snapshot->process->read_bytes( - ignored_data.data, region.size, remote(region.addr), + ignored_data.data.data(), region.size, remote(region.addr), simgrid::mc::ProcessIndexDisabled); - xbt_dynar_push(snapshot->ignored_data, &ignored_data); + snapshot->ignored_data.push_back(std::move(ignored_data)); } // Zero the memory: @@ -536,12 +524,10 @@ static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot) static void MC_snapshot_ignore_restore(mc_snapshot_t snapshot) { - unsigned int cursor = 0; - s_mc_snapshot_ignored_data_t ignored_data; - xbt_dynar_foreach (snapshot->ignored_data, cursor, ignored_data) { - snapshot->process->write_bytes(ignored_data.data, ignored_data.size, + for (auto const& ignored_data : snapshot->ignored_data) + snapshot->process->write_bytes( + ignored_data.data.data(), ignored_data.data.size(), remote(ignored_data.start)); - } } static std::vector MC_get_current_fds(pid_t pid)