#include <unistd.h>
+#include <fcntl.h>
#include <string.h>
#include <link.h>
#include <dirent.h>
#include "src/mc/mc_private.h"
#include "xbt/module.h"
#include <xbt/mmalloc.h>
+#include <xbt/memory.hpp>
#include "src/smpi/private.h"
#include "src/xbt/mmalloc/mmprivate.h"
using simgrid::mc::remote;
-extern "C" {
-
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc,
"Logging specific to mc_checkpoint");
-}
-
namespace simgrid {
namespace mc {
}
}
-#ifdef HAVE_SMPI
+#if HAVE_SMPI
RegionSnapshot privatized_region(
RegionType region_type, void *start_addr, void* permanent_addr,
std::size_t size, const RegionSnapshot* ref_region
ref_region = mc_model_checker->parent_snapshot_->snapshot_regions[index].get();
simgrid::mc::RegionSnapshot region;
-#ifdef HAVE_SMPI
+#if HAVE_SMPI
const bool privatization_aware = object_info
&& mc_model_checker->process().privatized(*object_info);
if (privatization_aware && MC_smpi_process_count())
heap->heaplimit,
process->get_malloc_info());
-#ifdef HAVE_SMPI
+#if HAVE_SMPI
if (mc_model_checker->process().privatized() && MC_smpi_process_count())
// snapshot->privatization_index = smpi_loaded_page
mc_model_checker->process().read_variable(
std::vector<simgrid::xbt::VmMap> const& maps,
simgrid::mc::ObjectInformation* result)
{
- char* file_name = xbt_strdup(result->file_name.c_str());
- const char *name = xbt_basename(file_name);
+ char* name = xbt_basename(result->file_name.c_str());
+
for (size_t i = 0; i < maps.size(); ++i) {
simgrid::xbt::VmMap const& reg = maps[i];
- if (maps[i].pathname.empty()
- || strcmp(xbt_basename(maps[i].pathname.c_str()), name)) {
- // Nothing to do
- } else if ((reg.prot & PROT_WRITE)) {
+ if (maps[i].pathname.empty())
+ continue;
+ char* map_basename = xbt_basename(maps[i].pathname.c_str());
+ if (strcmp(name, map_basename) != 0) {
+ free(map_basename);
+ continue;
+ }
+ free(map_basename);
+ if ((reg.prot & PROT_WRITE)) {
xbt_assert(!result->start_rw,
"Multiple read-write segments for %s, not supported",
maps[i].pathname.c_str());
xbt_assert(result->start_rw);
xbt_assert(result->start_exec);
- free(file_name);
+
+ free(name);
}
/************************************* Take Snapshot ************************************/
link[res] = '\0';
-#ifdef HAVE_SMPI
+#if HAVE_SMPI
if(smpi_is_privatisation_file(link))
continue;
#endif
continue;
// If dot_output enabled, do not handle the corresponding file
- if (dot_output != nullptr && strcmp(xbt_basename(link), _sg_mc_dot_output_file) == 0)
- continue;
+ if (dot_output != nullptr) {
+ char* link_basename = xbt_basename(link);
+ if (strcmp(link_basename, _sg_mc_dot_output_file) == 0) {
+ free(link_basename);
+ continue;
+ }
+ free(link_basename);
+ }
// This is probably a shared memory used by lttng-ust:
if(strncmp("/dev/shm/ust-shm-tmp-", link, 21)==0)
restore(region.get());
}
-#ifdef HAVE_SMPI
+#if HAVE_SMPI
// TODO, send a message to implement this in the MCed process
if(snapshot->privatization_index >= 0) {
// Fix the privatization mmap:
s_mc_restore_message message;
message.type = MC_MESSAGE_RESTORE;
message.index = snapshot->privatization_index;
- mc_model_checker->process().send_message(message);
+ mc_model_checker->process().getChannel().send(message);
}
#endif
}
if (use_soft_dirty)
mc_model_checker->process().reset_soft_dirty();
snapshot_ignore_restore(snapshot);
- mc_model_checker->process().cache_flags = 0;
+ mc_model_checker->process().clear_cache();
if (use_soft_dirty)
mc_model_checker->parent_snapshot_ = snapshot;
}
}
}
-
-extern "C"
-mc_snapshot_t simcall_HANDLER_mc_snapshot(smx_simcall_t simcall)
-{
- return simgrid::mc::take_snapshot(1);
-}