X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/87678976effce304fd357a04912aee463d85deb8..0cfb40d124549f4dde6f00095847de0d04828adf:/src/mc/mc_checkpoint.cpp diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index eaf4e48117..36ed86313d 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -11,6 +11,10 @@ #include #include +#ifndef WIN32 +#include +#endif + #include "src/internal_config.h" #include "src/mc/mc_private.h" #include "xbt/module.h" @@ -110,7 +114,7 @@ RegionSnapshot privatized_region( simgrid::mc::RegionSnapshot region = simgrid::mc::RegionSnapshot( region_type, start_addr, permanent_addr, size); region.privatized_data(std::move(data)); - return std::move(region); + return region; } #endif @@ -261,8 +265,7 @@ void find_object_address( if (result->end_exec && (const void*) result->end_exec > result->end) result->end = result->end_exec; - xbt_assert(result->start_rw); - xbt_assert(result->start_exec); + xbt_assert(result->start_exec || result->start_rw || result->start_ro); free(name); } @@ -354,7 +357,7 @@ static std::vector get_local_variables_values( std::vector variables; for (s_mc_stack_frame_t& stack_frame : stack_frames) fill_local_variables_values(&stack_frame, stack_frame.frame, process_index, variables); - return std::move(variables); + return variables; } static std::vector unwind_stack_frames(simgrid::mc::UnwindContext* stack_context) @@ -413,10 +416,10 @@ static std::vector unwind_stack_frames(simgrid::mc::UnwindCo xbt_abort(); } - return std::move(result); + return result; }; -static std::vector take_snapshot_stacks(simgrid::mc::Snapshot* * snapshot) +static std::vector take_snapshot_stacks(simgrid::mc::Snapshot* snapshot) { std::vector res; @@ -440,10 +443,10 @@ static std::vector take_snapshot_stacks(simgrid::mc::Snap size_t stack_size = (char*) stack.address + stack.size - (char*) sp; - (*snapshot)->stack_sizes.push_back(stack_size); + snapshot->stack_sizes.push_back(stack_size); } - return std::move(res); + return res; } @@ -559,23 +562,24 @@ static std::vector get_current_fds(pid_t pid) } closedir (fd_dir); - return std::move(fds); + return fds; } -simgrid::mc::Snapshot* take_snapshot(int num_state) +std::shared_ptr take_snapshot(int num_state) { XBT_DEBUG("Taking snapshot %i", num_state); simgrid::mc::Process* mc_process = &mc_model_checker->process(); - simgrid::mc::Snapshot* snapshot = new simgrid::mc::Snapshot(mc_process); + std::shared_ptr snapshot = + std::make_shared(mc_process); snapshot->num_state = num_state; for (auto& p : mc_model_checker->process().simix_processes()) snapshot->enabled_processes.insert(p.copy.pid); - snapshot_handle_ignore(snapshot); + snapshot_handle_ignore(snapshot.get()); if (_sg_mc_snapshot_fds) snapshot->current_fds = get_current_fds(mc_model_checker->process().pid()); @@ -583,15 +587,14 @@ simgrid::mc::Snapshot* take_snapshot(int num_state) const bool use_soft_dirty = _sg_mc_sparse_checkpoint && _sg_mc_soft_dirty; /* Save the std heap and the writable mapped pages of libsimgrid and binary */ - get_memory_regions(mc_process, snapshot); + get_memory_regions(mc_process, snapshot.get()); if (use_soft_dirty) mc_process->reset_soft_dirty(); snapshot->to_ignore = mc_model_checker->process().ignored_heap(); if (_sg_mc_visited > 0 || strcmp(_sg_mc_property_file, "")) { - snapshot->stacks = - take_snapshot_stacks(&snapshot); + snapshot->stacks = take_snapshot_stacks(snapshot.get()); if (_sg_mc_hash) snapshot->hash = simgrid::mc::hash(*snapshot); else @@ -599,7 +602,7 @@ simgrid::mc::Snapshot* take_snapshot(int num_state) } else snapshot->hash = 0; - snapshot_ignore_restore(snapshot); + snapshot_ignore_restore(snapshot.get()); if (use_soft_dirty) mc_model_checker->parent_snapshot_ = snapshot; return snapshot; @@ -646,16 +649,16 @@ void restore_snapshot_fds(simgrid::mc::Snapshot* snapshot) } } -void restore_snapshot(simgrid::mc::Snapshot* snapshot) +void restore_snapshot(std::shared_ptr snapshot) { XBT_DEBUG("Restore snapshot %i", snapshot->num_state); const bool use_soft_dirty = _sg_mc_sparse_checkpoint && _sg_mc_soft_dirty; - restore_snapshot_regions(snapshot); + restore_snapshot_regions(snapshot.get()); if (_sg_mc_snapshot_fds) - restore_snapshot_fds(snapshot); + restore_snapshot_fds(snapshot.get()); if (use_soft_dirty) mc_model_checker->process().reset_soft_dirty(); - snapshot_ignore_restore(snapshot); + snapshot_ignore_restore(snapshot.get()); mc_model_checker->process().clear_cache(); if (use_soft_dirty) mc_model_checker->parent_snapshot_ = snapshot;