if (terminate_asap)
::_Exit(0);
}
-void AppSide::handle_fork(const s_mc_message_int_t* msg)
+void AppSide::handle_fork(const s_mc_message_fork_t* msg)
{
int status;
int pid;
struct sockaddr_un addr = {};
addr.sun_family = AF_UNIX;
- snprintf(addr.sun_path, 64, "/tmp/simgrid-mc-%" PRIu64, msg->value);
- auto addr_size = offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path);
+ std::copy_n(begin(msg->socket_name), MC_SOCKET_NAME_LEN, addr.sun_path);
- xbt_assert(connect(sock, (struct sockaddr*)&addr, addr_size) >= 0,
- "Cannot connect to Checker on %s: %s.", addr.sun_path, strerror(errno));
+ xbt_assert(connect(sock, (struct sockaddr*)&addr, sizeof addr) >= 0, "Cannot connect to Checker on %c%s: %s.",
+ (addr.sun_path[0] ? addr.sun_path[0] : '@'), addr.sun_path + 1, strerror(errno));
channel_.reset_socket(sock);
// Serialize each transition to describe what each actor is doing
XBT_DEBUG("Deliver ACTOR_TRANSITION_PROBE payload");
for (const auto& actor_status : status) {
-
const auto& actor = actor_list.at(actor_status.aid);
const int max_considered = actor_status.max_considered;
break;
case MessageType::FORK:
- assert_msg_size("FORK", s_mc_message_int_t);
- handle_fork((s_mc_message_int_t*)message_buffer.data());
+ assert_msg_size("FORK", s_mc_message_fork_t);
+ handle_fork((s_mc_message_fork_t*)message_buffer.data());
break;
case MessageType::WAIT_CHILD:
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
}