X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e9a884e745ad230410dde4af838d5727fd33edd0..97fed1ab7cb584d61415854ce500f2176679c5ac:/src/mc/api.cpp diff --git a/src/mc/api.cpp b/src/mc/api.cpp index b6cee6c9ba..6f54255a5c 100644 --- a/src/mc/api.cpp +++ b/src/mc/api.cpp @@ -2,14 +2,15 @@ #include "src/kernel/activity/MailboxImpl.hpp" #include "src/kernel/activity/MutexImpl.hpp" +#include "src/kernel/actor/SimcallObserver.hpp" #include "src/mc/Session.hpp" #include "src/mc/checker/Checker.hpp" -#include "src/mc/checker/SimcallObserver.hpp" #include "src/mc/mc_comm_pattern.hpp" #include "src/mc/mc_exit.hpp" #include "src/mc/mc_pattern.hpp" #include "src/mc/mc_private.hpp" #include "src/mc/remote/RemoteProcess.hpp" +#include "src/surf/HostImpl.hpp" #include #include @@ -91,7 +92,7 @@ static inline smx_simcall_t MC_state_choose_request_for_process(const RemoteProc { /* reset the outgoing transition */ simgrid::mc::ActorState* procstate = &state->actor_states_[actor->get_pid()]; - state->transition_.pid_ = -1; + state->transition_.aid_ = -1; state->transition_.times_considered_ = -1; state->transition_.textual[0] = '\0'; state->executed_req_.call_ = Simcall::NONE; @@ -169,7 +170,7 @@ static inline smx_simcall_t MC_state_choose_request_for_process(const RemoteProc if (not req) return nullptr; - state->transition_.pid_ = actor->get_pid(); + state->transition_.aid_ = actor->get_pid(); state->executed_req_ = *req; // Fetch the data of the request and translate it: @@ -365,13 +366,16 @@ xbt::string const& Api::get_actor_host_name(smx_actor_t actor) const // Read the simgrid::xbt::string in the MCed process: simgrid::mc::ActorInformation* info = actor_info_cast(actor); - auto remote_string_address = - remote(reinterpret_cast(&actor->get_host()->get_name())); - simgrid::xbt::string_data remote_string = process->read(remote_string_address); - std::vector hostname(remote_string.len + 1); - // no need to read the terminating null byte, and thus hostname[remote_string.len] is guaranteed to be '\0' - process->read_bytes(hostname.data(), remote_string.len, remote(remote_string.data)); - info->hostname = &mc_model_checker->get_host_name(hostname.data()); + + if (not info->hostname) { + Remote temp_host = process->read(remote(actor->get_host())); + auto remote_string_address = remote(&xbt::string::to_string_data(temp_host.get_buffer()->get_impl()->get_name())); + simgrid::xbt::string_data remote_string = process->read(remote_string_address); + std::vector hostname(remote_string.len + 1); + // no need to read the terminating null byte, and thus hostname[remote_string.len] is guaranteed to be '\0' + process->read_bytes(hostname.data(), remote_string.len, remote(remote_string.data)); + info->hostname = &mc_model_checker->get_host_name(hostname.data()); + } return *info->hostname; } @@ -414,7 +418,7 @@ std::string Api::get_actor_dot_label(smx_actor_t actor) const simgrid::mc::Checker* Api::initialize(char** argv, simgrid::mc::CheckerAlgorithm algo) const { - simgrid::mc::session = new simgrid::mc::Session([argv] { + auto session = new simgrid::mc::Session([argv] { int i = 1; while (argv[i] != nullptr && argv[i][0] == '-') i++; @@ -446,6 +450,7 @@ simgrid::mc::Checker* Api::initialize(char** argv, simgrid::mc::CheckerAlgorithm THROW_IMPOSSIBLE; } + simgrid::mc::session_singleton = session; mc_model_checker->setChecker(checker); return checker; } @@ -455,22 +460,9 @@ std::vector& Api::get_actors() const return mc_model_checker->get_remote_process().actors(); } -bool Api::actor_is_enabled(aid_t pid) const -{ - return session->actor_is_enabled(pid); -} - unsigned long Api::get_maxpid() const { - static const char* name = nullptr; - if (not name) { - name = "simgrid::kernel::actor::maxpid"; - if (mc_model_checker->get_remote_process().find_variable(name) == nullptr) - name = "maxpid"; // We seem to miss the namespaces when compiling with GCC - } - unsigned long maxpid; - mc_model_checker->get_remote_process().read_variable(name, &maxpid, sizeof(maxpid)); - return maxpid; + return mc_model_checker->get_remote_process().get_maxpid(); } int Api::get_actors_size() const @@ -938,7 +930,7 @@ void Api::restore_state(std::shared_ptr system_state) con void Api::log_state() const { - session->log_state(); + session_singleton->log_state(); } bool Api::snapshot_equal(const Snapshot* s1, const Snapshot* s2) const @@ -954,14 +946,14 @@ simgrid::mc::Snapshot* Api::take_snapshot(int num_state) const void Api::s_close() const { - session->close(); + session_singleton->close(); } void Api::execute(Transition& transition, smx_simcall_t simcall) const { /* FIXME: once all simcalls have observers, kill the simcall parameter and use mc_model_checker->simcall_to_string() */ transition.textual = request_to_string(simcall, transition.times_considered_); - session->execute(transition); + session_singleton->execute(transition); } void Api::automaton_load(const char* file) const