X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e8f9970cc4c3735bc6a7a8380b2ca0a73637b848..3a1ea70a418f393ca1677074e928c664022295bd:/src/mc/Session.cpp diff --git a/src/mc/Session.cpp b/src/mc/Session.cpp index 629505c8a5..0dd371035a 100644 --- a/src/mc/Session.cpp +++ b/src/mc/Session.cpp @@ -15,6 +15,8 @@ #include "xbt/log.h" #include "xbt/system_error.hpp" +#include + #include #ifdef __linux__ #include @@ -85,8 +87,8 @@ Session::Session(const std::function& code) xbt_assert(mc_model_checker == nullptr, "Did you manage to start the MC twice in this process?"); - auto process = std::unique_ptr(new simgrid::mc::RemoteClient(pid, sockets[1])); - model_checker_.reset(new simgrid::mc::ModelChecker(std::move(process))); + auto process = std::make_unique(pid); + model_checker_ = std::make_unique(std::move(process), sockets[1]); mc_model_checker = model_checker_.get(); model_checker_->start(); @@ -105,18 +107,18 @@ void Session::initialize() initial_snapshot_ = std::make_shared(0); } -void Session::execute(Transition const& transition) +void Session::execute(Transition const& transition) const { model_checker_->handle_simcall(transition); model_checker_->wait_for_requests(); } -void Session::restore_initial_state() +void Session::restore_initial_state() const { - this->initial_snapshot_->restore(&model_checker_->process()); + this->initial_snapshot_->restore(&model_checker_->get_remote_simulation()); } -void Session::log_state() +void Session::log_state() const { model_checker_->getChecker()->log_state(); @@ -141,6 +143,16 @@ void Session::close() } } +bool Session::actor_is_enabled(aid_t pid) const +{ + s_mc_message_actor_enabled_t msg{MC_MESSAGE_ACTOR_ENABLED, pid}; + model_checker_->channel().send(msg); + char buff[MC_MESSAGE_LENGTH]; + ssize_t received = model_checker_->channel().receive(buff, MC_MESSAGE_LENGTH, true); + xbt_assert(received == sizeof(s_mc_message_int_t), "Unexpected size in answer to ACTOR_ENABLED"); + return ((s_mc_message_int_t*)buff)->value; +} + simgrid::mc::Session* session; }