socket_event_ = event_new(
base, get_channel().get_socket(), EV_READ | EV_PERSIST,
[](evutil_socket_t, short events, void* arg) {
- auto checker = static_cast<simgrid::mc::CheckerSide*>(arg);
+ auto* checker = static_cast<simgrid::mc::CheckerSide*>(arg);
if (events == EV_READ) {
do {
std::array<char, MC_MESSAGE_LENGTH> buffer;
signal_event_ = event_new(
base, SIGCHLD, EV_SIGNAL | EV_PERSIST,
[](evutil_socket_t sig, short events, void* arg) {
- auto checker = static_cast<simgrid::mc::CheckerSide*>(arg);
+ auto* checker = static_cast<simgrid::mc::CheckerSide*>(arg);
if (events == EV_SIGNAL) {
if (sig == SIGCHLD)
checker->handle_waitpid();
wait_for_requests();
}
-std::unique_ptr<CheckerSide> CheckerSide::clone(int master_socket)
+std::unique_ptr<CheckerSide> CheckerSide::clone(int master_socket, const std::string& master_socket_name)
{
- s_mc_message_int_t m = {};
- m.type = MessageType::FORK;
- m.value = getpid();
+ s_mc_message_fork_t m = {};
+ m.type = MessageType::FORK;
+ xbt_assert(master_socket_name.size() == MC_SOCKET_NAME_LEN);
+ std::copy_n(begin(master_socket_name), MC_SOCKET_NAME_LEN, begin(m.socket_name));
xbt_assert(get_channel().send(m) == 0, "Could not ask the app to fork on need.");
int sock = accept(master_socket, nullptr /* I know who's connecting*/, nullptr);
break;
}
+ case MessageType::UNIGNORE_MEMORY: {
+ consumed = sizeof(s_mc_message_ignore_memory_t);
+#if SIMGRID_HAVE_STATEFUL_MC
+ if (remote_memory_ != nullptr) {
+ s_mc_message_ignore_memory_t message;
+ xbt_assert(size >= static_cast<ssize_t>(sizeof(message)), "Broken message");
+ memcpy(&message, buffer, sizeof(message));
+ get_remote_memory()->unignore_region(message.addr, message.size);
+ } else
+#endif
+ XBT_INFO("Ignoring an UNIGNORE_MEMORY message because we don't need to introspect memory.");
+ break;
+ }
+
case MessageType::STACK_REGION: {
consumed = sizeof(s_mc_message_stack_region_t);
#if SIMGRID_HAVE_STATEFUL_MC