std::vector<s_mc_message_actors_status_one_t> status;
for (auto const& [aid, actor] : actor_list) {
+ xbt_assert(actor);
+ xbt_assert(actor->simcall_.observer_, "simcall %s in actor %s has no observer.", actor->simcall_.get_cname(),
+ actor->get_cname());
s_mc_message_actors_status_one_t one = {};
one.type = MessageType::ACTORS_STATUS_REPLY_TRANSITION;
one.aid = aid;
strncpy(probe.buffer.data(), str.c_str(), probe.buffer.size() - 1);
probe.buffer.back() = '\0';
+ XBT_DEBUG("send ACTOR_TRANSITION_PROBE(%s) ~> '%s'", actor->get_cname(), str.c_str());
xbt_assert(channel_.send(probe) == 0, "Could not send ACTOR_TRANSITION_PROBE payload: %s", strerror(errno));
}
// NOTE: We do NOT need to reset `times_considered` for each actor's
simgrid::mc::processes_time.resize(simgrid::kernel::actor::ActorImpl::get_maxpid());
MC_ignore_heap(simgrid::mc::processes_time.data(),
simgrid::mc::processes_time.size() * sizeof(simgrid::mc::processes_time[0]));
+ kernel::activity::CommImpl::setup_mc();
sthread_disable();
coverage_checkpoint();
message.size = size;
xbt_assert(channel_.send(message) == 0, "Could not send IGNORE_MEMORY message to model-checker: %s", strerror(errno));
#else
- xbt_die("Cannot really call ignore_heap() in non-SIMGRID_MC mode.");
+ xbt_die("Cannot really call ignore_memory() in non-SIMGRID_MC mode.");
+#endif
+}
+
+void AppSide::unignore_memory(void* addr, std::size_t size) const
+{
+ if (not MC_is_active() || not need_memory_info_)
+ return;
+
+#if SIMGRID_HAVE_STATEFUL_MC
+ s_mc_message_ignore_memory_t message = {};
+ message.type = MessageType::UNIGNORE_MEMORY;
+ message.addr = (std::uintptr_t)addr;
+ message.size = size;
+ xbt_assert(channel_.send(message) == 0, "Could not send UNIGNORE_MEMORY message to model-checker: %s",
+ strerror(errno));
+#else
+ xbt_die("Cannot really call unignore_memory() in non-SIMGRID_MC mode.");
#endif
}