auto checker = static_cast<simgrid::mc::CheckerSide*>(arg);
if (events == EV_READ) {
do {
-
std::array<char, MC_MESSAGE_LENGTH> buffer;
ssize_t size = checker->get_channel().receive(buffer.data(), buffer.size(), MSG_DONTWAIT);
if (size == -1) {
int sockets[2];
xbt_assert(socketpair(AF_UNIX,
#ifdef __APPLE__
- SOCK_STREAM, /* Mac OSX does not have AF_UNIX + SOCK_SEQPACKET, even if that's faster*/
+ SOCK_STREAM, /* Mac OSX does not have AF_UNIX + SOCK_SEQPACKET, even if that's faster */
#else
SOCK_SEQPACKET,
#endif
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);
(int)answer.type, (int)MessageType::FINALIZE_REPLY);
}
-void CheckerSide::dispatch_events()
+void CheckerSide::dispatch_events() const
{
event_base_dispatch(base_.get());
}
}
} else { // Ask our proxy to wait for us
-
s_mc_message_int_t request = {};
request.type = MessageType::WAIT_CHILD;
request.value = pid_;