#include "src/mc/mc_pattern.hpp"
#include "src/mc/mc_private.hpp"
#include "src/mc/remote/RemoteProcess.hpp"
+#include "src/surf/HostImpl.hpp"
#include <xbt/asserts.h>
#include <xbt/log.h>
{
/* 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;
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:
// Read the simgrid::xbt::string in the MCed process:
simgrid::mc::ActorInformation* info = actor_info_cast(actor);
- auto remote_string_address =
- remote(reinterpret_cast<const simgrid::xbt::string_data*>(&actor->get_host()->get_name()));
- simgrid::xbt::string_data remote_string = process->read(remote_string_address);
- std::vector<char> 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<s4u::Host> 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<char> 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;
}