From cc1eb8c4e293f75ccddc257ebc44bfcd0883073e Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 8 Jun 2015 12:34:56 +0200 Subject: [PATCH] [mc] Make Snapshot::snapshot_regions a std::vector --- src/mc/mc_checkpoint.cpp | 16 +++++++--------- src/mc/mc_compare.cpp | 8 ++++---- src/mc/mc_diff.cpp | 4 ++-- src/mc/mc_snapshot.cpp | 10 ++-------- src/mc/mc_snapshot.h | 4 ++-- 5 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index d420aa9aee..cda2505020 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -165,17 +165,16 @@ static void MC_snapshot_add_region(int index, mc_snapshot_t snapshot, region.object_info(object_info); snapshot->snapshot_regions[index] - = new simgrid::mc::RegionSnapshot(std::move(region)); + = std::unique_ptr( + new simgrid::mc::RegionSnapshot(std::move(region))); return; } static void MC_get_memory_regions(mc_process_t process, mc_snapshot_t snapshot) { const size_t n = process->object_infos_size; - snapshot->snapshot_regions_count = n + 1; - snapshot->snapshot_regions = xbt_new0(mc_mem_region_t, n + 1); - - for (size_t i = 0; i!=n; ++i) { + snapshot->snapshot_regions.resize(n + 1); + for (size_t i = 0; i != n; ++i) { mc_object_info_t object_info = process->object_infos[i]; MC_snapshot_add_region(i, snapshot, simgrid::mc::RegionType::Data, object_info, object_info->start_rw, object_info->start_rw, @@ -651,11 +650,10 @@ mc_snapshot_t MC_take_snapshot(int num_state) static inline void MC_restore_snapshot_regions(mc_snapshot_t snapshot) { - const size_t n = snapshot->snapshot_regions_count; - for (size_t i = 0; i < n; i++) { + for(std::unique_ptr const& region : snapshot->snapshot_regions) { // For privatized, variables we decided it was not necessary to take the snapshot: - if (snapshot->snapshot_regions[i]) - MC_region_restore(snapshot->snapshot_regions[i]); + if (region) + MC_region_restore(region.get()); } #ifdef HAVE_SMPI diff --git a/src/mc/mc_compare.cpp b/src/mc/mc_compare.cpp index d43907adf9..56b01f6a8e 100644 --- a/src/mc/mc_compare.cpp +++ b/src/mc/mc_compare.cpp @@ -574,15 +574,15 @@ int snapshot_compare(void *state1, void *state2) cursor++; } - size_t regions_count = s1->snapshot_regions_count; + size_t regions_count = s1->snapshot_regions.size(); // TODO, raise a difference instead? - xbt_assert(regions_count == s2->snapshot_regions_count); + xbt_assert(regions_count == s2->snapshot_regions.size()); mc_comp_times->global_variables_comparison_time = 0; for (size_t k = 0; k != regions_count; ++k) { - mc_mem_region_t region1 = s1->snapshot_regions[k]; - mc_mem_region_t region2 = s2->snapshot_regions[k]; + mc_mem_region_t region1 = s1->snapshot_regions[k].get(); + mc_mem_region_t region2 = s2->snapshot_regions[k].get(); // Preconditions: if (region1->region_type() != simgrid::mc::RegionType::Data) diff --git a/src/mc/mc_diff.cpp b/src/mc/mc_diff.cpp index 35e8779f62..06b11417e8 100644 --- a/src/mc/mc_diff.cpp +++ b/src/mc/mc_diff.cpp @@ -419,9 +419,9 @@ void reset_heap_information() static inline mc_mem_region_t MC_get_heap_region(mc_snapshot_t snapshot) { - size_t n = snapshot->snapshot_regions_count; + size_t n = snapshot->snapshot_regions.size(); for (size_t i=0; i!=n; ++i) { - mc_mem_region_t region = snapshot->snapshot_regions[i]; + mc_mem_region_t region = snapshot->snapshot_regions[i].get(); if (region->region_type() == simgrid::mc::RegionType::Heap) return region; } diff --git a/src/mc/mc_snapshot.cpp b/src/mc/mc_snapshot.cpp index 54f07bab33..0fdb7a1392 100644 --- a/src/mc/mc_snapshot.cpp +++ b/src/mc/mc_snapshot.cpp @@ -26,9 +26,9 @@ extern "C" { mc_mem_region_t mc_get_snapshot_region( const void* addr, const s_mc_snapshot_t* snapshot, int process_index) { - size_t n = snapshot->snapshot_regions_count; + size_t n = snapshot->snapshot_regions.size(); for (size_t i = 0; i != n; ++i) { - mc_mem_region_t region = snapshot->snapshot_regions[i]; + mc_mem_region_t region = snapshot->snapshot_regions[i].get(); if (!(region && region->contain(simgrid::mc::remote(addr)))) continue; @@ -157,8 +157,6 @@ Snapshot::Snapshot() : process(nullptr), num_state(0), heap_bytes_used(0), - snapshot_regions(nullptr), - snapshot_regions_count(0), enabled_processes(), privatization_index(0), stack_sizes(), @@ -170,10 +168,6 @@ Snapshot::Snapshot() : Snapshot::~Snapshot() { - for (size_t i = 0; i < this->snapshot_regions_count; i++) { - delete this->snapshot_regions[i]; - } - xbt_free(this->snapshot_regions); xbt_dynar_free(&(this->stacks)); } diff --git a/src/mc/mc_snapshot.h b/src/mc/mc_snapshot.h index 1a58db855d..17c64d886f 100644 --- a/src/mc/mc_snapshot.h +++ b/src/mc/mc_snapshot.h @@ -12,6 +12,7 @@ #include #include +#include #include #include "../xbt/mmalloc/mmprivate.h" @@ -140,8 +141,7 @@ public: // To be private mc_process_t process; int num_state; size_t heap_bytes_used; - mc_mem_region_t* snapshot_regions; - size_t snapshot_regions_count; + std::vector> snapshot_regions; std::set enabled_processes; int privatization_index; std::vector stack_sizes; -- 2.20.1