Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use xbt::string for MC hostnames.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 1 Mar 2021 16:21:04 +0000 (17:21 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 1 Mar 2021 16:21:04 +0000 (17:21 +0100)
src/mc/ModelChecker.hpp
src/mc/api.cpp
src/mc/api.hpp
src/mc/checker/CommunicationDeterminismChecker.cpp
src/mc/mc_pattern.hpp
src/mc/remote/RemoteSimulation.hpp

index cf5ea89..0647ada 100644 (file)
@@ -9,10 +9,10 @@
 #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 {
@@ -22,7 +22,7 @@ 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_;
@@ -40,9 +40,9 @@ public:
     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();
index 38c24a8..c4f6abc 100644 (file)
@@ -291,9 +291,14 @@ bool Api::request_depend_asymmetric(smx_simcall_t r1, smx_simcall_t r2) const
 }
 
 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();
 
@@ -305,8 +310,8 @@ const char* Api::actor_get_host_name(smx_actor_t actor) const
   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
@@ -428,12 +433,6 @@ std::vector<char> Api::get_pattern_comm_data(RemotePtr<kernel::activity::CommImp
   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
 {
@@ -605,11 +604,6 @@ void Api::mc_exit(int status) 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();
index 78e14ae..788cf40 100644 (file)
@@ -80,7 +80,7 @@ public:
   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
@@ -103,7 +103,6 @@ public:
   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;
 
index 5d79c4a..5d8e43b 100644 (file)
@@ -117,8 +117,8 @@ static void update_comm_pattern(simgrid::mc::PatternCommunication* comm_pattern,
   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);
@@ -194,7 +194,7 @@ void CommunicationDeterminismChecker::get_comm_pattern(smx_simcall_t request, Ca
     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);
@@ -224,7 +224,7 @@ void CommunicationDeterminismChecker::get_comm_pattern(smx_simcall_t request, Ca
 #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);
 
index 385224d..79bcd24 100644 (file)
@@ -24,8 +24,8 @@ public:
   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;
index 8a8b9f7..13a72c7 100644 (file)
@@ -26,7 +26,7 @@ public:
   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()