region.object_info(object_info);
snapshot->snapshot_regions[index]
- = new simgrid::mc::RegionSnapshot(std::move(region));
+ = std::unique_ptr<simgrid::mc::RegionSnapshot>(
+ 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,
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<s_mc_mem_region_t> 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
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)
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;
}
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;
process(nullptr),
num_state(0),
heap_bytes_used(0),
- snapshot_regions(nullptr),
- snapshot_regions_count(0),
enabled_processes(),
privatization_index(0),
stack_sizes(),
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));
}
#include <vector>
#include <set>
+#include <memory>
#include <simgrid_config.h>
#include "../xbt/mmalloc/mmprivate.h"
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<std::unique_ptr<s_mc_mem_region_t>> snapshot_regions;
std::set<pid_t> enabled_processes;
int privatization_index;
std::vector<size_t> stack_sizes;