X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/012a604e0ccb1e677bf9d538d06c9adc34740aed..009ff7e4463fae3c7a2181c1f8147fd100afbfdd:/src/mc/ModelChecker.cpp diff --git a/src/mc/ModelChecker.cpp b/src/mc/ModelChecker.cpp index 0f9601f61d..f4de7fefea 100644 --- a/src/mc/ModelChecker.cpp +++ b/src/mc/ModelChecker.cpp @@ -39,8 +39,23 @@ ModelChecker::ModelChecker(std::unique_ptr remote_simulation, void ModelChecker::start() { - checker_side_.start( - [](evutil_socket_t sig, short events, void* arg) { ((ModelChecker*)arg)->handle_events(sig, events); }); + checker_side_.start([](evutil_socket_t sig, short events, void* arg) { + auto mc = static_cast(arg); + if (events == EV_READ) { + char buffer[MC_MESSAGE_LENGTH]; + ssize_t size = mc->checker_side_.get_channel().receive(buffer, sizeof(buffer), false); + if (size == -1 && errno != EAGAIN) + throw simgrid::xbt::errno_error(); + + if (not mc->handle_message(buffer, size)) + mc->checker_side_.break_loop(); + } else if (events == EV_SIGNAL) { + if (sig == SIGCHLD) + mc->handle_waitpid(); + } else { + xbt_die("Unexpected event"); + } + }); XBT_DEBUG("Waiting for the model-checked process"); int status; @@ -233,26 +248,6 @@ void ModelChecker::exit(int status) ::exit(status); } -void ModelChecker::handle_events(int sig, short events) -{ - if (events == EV_READ) { - char buffer[MC_MESSAGE_LENGTH]; - ssize_t size = checker_side_.get_channel().receive(buffer, sizeof(buffer), false); - if (size == -1 && errno != EAGAIN) - throw simgrid::xbt::errno_error(); - - if (not handle_message(buffer, size)) - checker_side_.break_loop(); - } - else if (events == EV_SIGNAL) { - if (sig == SIGCHLD) - this->handle_waitpid(); - } - else { - xbt_die("Unexpected event"); - } -} - void ModelChecker::handle_waitpid() { XBT_DEBUG("Check for wait event");