#include "xbt/system_error.hpp"
#include <array>
+#include <csignal>
#include <sys/ptrace.h>
#include <sys/wait.h>
void ModelChecker::start()
{
- checker_side_.start([](evutil_socket_t sig, short events, void* arg) {
- auto mc = static_cast<simgrid::mc::ModelChecker*>(arg);
- if (events == EV_READ) {
- std::array<char, MC_MESSAGE_LENGTH> buffer;
- ssize_t size = mc->checker_side_.get_channel().receive(buffer.data(), buffer.size(), false);
- if (size == -1 && errno != EAGAIN)
- throw simgrid::xbt::errno_error();
-
- if (not mc->handle_message(buffer.data(), size))
- mc->checker_side_.break_loop();
- } else if (events == EV_SIGNAL) {
- if (sig == SIGCHLD)
- mc->handle_waitpid();
- } else {
- xbt_die("Unexpected event");
- }
- });
+ checker_side_.start(
+ [](evutil_socket_t sig, short events, void* arg) {
+ auto mc = static_cast<simgrid::mc::ModelChecker*>(arg);
+ if (events == EV_READ) {
+ std::array<char, MC_MESSAGE_LENGTH> buffer;
+ ssize_t size = mc->checker_side_.get_channel().receive(buffer.data(), buffer.size(), false);
+ if (size == -1 && errno != EAGAIN)
+ throw simgrid::xbt::errno_error();
+
+ if (not mc->handle_message(buffer.data(), size))
+ mc->checker_side_.break_loop();
+ } else if (events == EV_SIGNAL) {
+ if (sig == SIGCHLD)
+ mc->handle_waitpid();
+ } else {
+ xbt_die("Unexpected event");
+ }
+ },
+ this);
XBT_DEBUG("Waiting for the model-checked process");
int status;
if (this->remote_process_->running())
checker_side_.dispatch();
}
-bool ModelChecker::simcall_is_visible(int aid)
+bool ModelChecker::simcall_is_visible(aid_t aid)
{
xbt_assert(mc_model_checker != nullptr, "This should be called from the checker side");
to_c_str(answer.type), (int)answer.type, (int)s, (int)MessageType::SIMCALL_IS_VISIBLE_ANSWER,
(int)sizeof(answer));
- XBT_DEBUG("is_visible(%d) is returning %s", aid, answer.value ? "true" : "false");
+ XBT_DEBUG("is_visible(%ld) is returning %s", aid, answer.value ? "true" : "false");
this->remote_process_->clear_cache();
return answer.value;
}
-std::string ModelChecker::simcall_to_string(MessageType type, int aid, int times_considered)
+std::string ModelChecker::simcall_to_string(MessageType type, aid_t aid, int times_considered)
{
xbt_assert(mc_model_checker != nullptr, "This should be called from the checker side");
return std::string(answer.value);
}
-std::string ModelChecker::simcall_to_string(int aid, int times_considered)
+std::string ModelChecker::simcall_to_string(aid_t aid, int times_considered)
{
std::string answer = simcall_to_string(MessageType::SIMCALL_TO_STRING, aid, times_considered);
- XBT_DEBUG("to_string(%d) is returning %s", aid, answer.c_str());
+ XBT_DEBUG("to_string(%ld) is returning %s", aid, answer.c_str());
return answer;
}
-std::string ModelChecker::simcall_dot_label(int aid, int times_considered)
+std::string ModelChecker::simcall_dot_label(aid_t aid, int times_considered)
{
std::string answer = simcall_to_string(MessageType::SIMCALL_DOT_LABEL, aid, times_considered);
- XBT_DEBUG("dot_label(%d) is returning %s", aid, answer.c_str());
+ XBT_DEBUG("dot_label(%ld) is returning %s", aid, answer.c_str());
return answer;
}