#include "src/mc/remote/CheckerSide.hpp"
#include "src/mc/sosp/PageStore.hpp"
#include "xbt/base.h"
+#include "xbt/string.hpp"
#include <memory>
#include <set>
-#include <string>
namespace simgrid {
namespace mc {
class ModelChecker {
CheckerSide checker_side_;
/** String pool for host names */
- std::set<std::string, std::less<>> hostnames_;
+ std::set<xbt::string, std::less<>> hostnames_;
// This is the parent snapshot of the current state:
PageStore page_store_{500};
std::unique_ptr<RemoteSimulation> remote_simulation_;
return page_store_;
}
- std::string const& get_host_name(std::string const& hostname)
+ xbt::string const& get_host_name(const char* hostname)
{
- return *this->hostnames_.insert(hostname).first;
+ return *this->hostnames_.insert(xbt::string(hostname)).first;
}
void start();
}
const char* Api::actor_get_host_name(smx_actor_t actor) const
+{
+ return get_actor_host_name(actor).c_str();
+}
+
+xbt::string const& Api::get_actor_host_name(smx_actor_t actor) const
{
if (mc_model_checker == nullptr)
- return actor->get_host()->get_cname();
+ return actor->get_host()->get_name();
const simgrid::mc::RemoteSimulation* process = &mc_model_checker->get_remote_simulation();
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()).c_str();
- return info->hostname;
+ info->hostname = &mc_model_checker->get_host_name(hostname.data());
+ return *info->hostname;
}
const char* Api::actor_get_name(smx_actor_t actor) const
return buffer;
}
-const char* Api::get_actor_host_name(smx_actor_t actor) const
-{
- const char* host_name = actor_get_host_name(actor);
- return host_name;
-}
-
#if HAVE_SMPI
bool Api::check_send_request_detached(smx_simcall_t const& simcall) const
{
mc_model_checker->exit(status);
}
-std::string const& Api::mc_get_host_name(std::string const& hostname) const
-{
- return mc_model_checker->get_host_name(hostname);
-}
-
void Api::dump_record_path() const
{
simgrid::mc::dumpRecordPath();
unsigned long get_pattern_comm_src_proc(RemotePtr<kernel::activity::CommImpl> const& addr) const;
unsigned long get_pattern_comm_dst_proc(RemotePtr<kernel::activity::CommImpl> const& addr) const;
std::vector<char> get_pattern_comm_data(RemotePtr<kernel::activity::CommImpl> const& addr) const;
- const char* get_actor_host_name(smx_actor_t actor) const;
+ xbt::string const& get_actor_host_name(smx_actor_t actor) const;
#if HAVE_SMPI
bool check_send_request_detached(smx_simcall_t const& simcall) const;
#endif
void handle_simcall(Transition const& transition) const;
void mc_wait_for_requests() const;
XBT_ATTRIB_NORETURN void mc_exit(int status) const;
- std::string const& mc_get_host_name(std::string const& hostname) const;
void dump_record_path() const;
smx_simcall_t mc_state_choose_request(simgrid::mc::State* state) const;
auto dst_proc = api::get().get_dst_actor(comm_addr);
comm_pattern->src_proc = src_proc->get_pid();
comm_pattern->dst_proc = dst_proc->get_pid();
- comm_pattern->src_host = api::get().get_actor_host_name(src_proc);
- comm_pattern->dst_host = api::get().get_actor_host_name(dst_proc);
+ comm_pattern->src_host = &api::get().get_actor_host_name(src_proc);
+ comm_pattern->dst_host = &api::get().get_actor_host_name(dst_proc);
if (comm_pattern->data.empty()) {
comm_pattern->data = api::get().get_pattern_comm_data(comm_addr);
pattern->comm_addr = api::get().get_comm_isend_raw_addr(request);
pattern->rdv = api::get().get_pattern_comm_rdv(pattern->comm_addr);
pattern->src_proc = api::get().get_pattern_comm_src_proc(pattern->comm_addr);
- pattern->src_host = api::get().get_actor_host_name(issuer);
+ pattern->src_host = &api::get().get_actor_host_name(issuer);
#if HAVE_SMPI
pattern->tag = api::get().get_smpi_request_tag(request, simgrid::simix::Simcall::COMM_ISEND);
#endif
pattern->rdv = api::get().get_pattern_comm_rdv(pattern->comm_addr);
pattern->dst_proc = api::get().get_pattern_comm_dst_proc(pattern->comm_addr);
- pattern->dst_host = api::get().get_actor_host_name(issuer);
+ pattern->dst_host = &api::get().get_actor_host_name(issuer);
} else
xbt_die("Unexpected call_type %i", (int)call_type);
PatternCommunicationType type = PatternCommunicationType::send;
unsigned long src_proc = 0;
unsigned long dst_proc = 0;
- const char* src_host = nullptr;
- const char* dst_host = nullptr;
+ const xbt::string* src_host = nullptr;
+ const xbt::string* dst_host = nullptr;
std::string rdv;
std::vector<char> data;
int tag = 0;
Remote<kernel::actor::ActorImpl> copy;
/** Hostname (owned by `mc_modelchecker->hostnames`) */
- const char* hostname = nullptr;
+ const xbt::string* hostname = nullptr;
std::string name;
void clear()