Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mc_api::get_dst_actor() defined,
authorEhsan Azimi <eazimi@ehsan.irisa.fr>
Fri, 27 Nov 2020 20:12:45 +0000 (21:12 +0100)
committerEhsan Azimi <eazimi@ehsan.irisa.fr>
Fri, 27 Nov 2020 20:12:45 +0000 (21:12 +0100)
it used in update_comm_pattern() of comm. deter. checker

src/mc/checker/CommunicationDeterminismChecker.cpp
src/mc/mc_api.cpp
src/mc/mc_api.hpp

index 47529bc..8310133 100644 (file)
@@ -97,18 +97,18 @@ static char* print_determinism_result(simgrid::mc::CommPatternDifference diff, i
 static void update_comm_pattern(simgrid::mc::PatternCommunication* comm_pattern,
                                 simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr)
 {
-  // HACK, type punning
+  // // HACK, type punning
   simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
   mc_model_checker->get_remote_simulation().read(temp_comm, comm_addr);
   const simgrid::kernel::activity::CommImpl* comm = temp_comm.get_buffer();
 
   auto src_proc = mcapi::get().get_src_actor(comm_addr);
-  smx_actor_t dst_proc =
-      mc_model_checker->get_remote_simulation().resolve_actor(simgrid::mc::remote(comm->dst_actor_.get()));
+  auto dst_proc = mcapi::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 = MC_smx_actor_get_host_name(src_proc);
   comm_pattern->dst_host = MC_smx_actor_get_host_name(dst_proc);
+  
   if (comm_pattern->data.empty() && comm->src_buff_ != nullptr) {
     size_t buff_size;
     mc_model_checker->get_remote_simulation().read(&buff_size, remote(comm->dst_buff_size_));
index 017982c..8e305f4 100644 (file)
@@ -290,6 +290,16 @@ smx_actor_t mc_api::get_src_actor(mc::RemotePtr<kernel::activity::CommImpl> cons
   return src_proc;
 }
 
+smx_actor_t mc_api::get_dst_actor(mc::RemotePtr<kernel::activity::CommImpl> const& comm_addr) const
+{
+  simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
+  mc_model_checker->get_remote_simulation().read(temp_comm, comm_addr);
+  const simgrid::kernel::activity::CommImpl* comm = temp_comm.get_buffer();
+
+  auto dst_proc = mc_model_checker->get_remote_simulation().resolve_actor(simgrid::mc::remote(comm->dst_actor_.get()));
+  return dst_proc;
+}
+
 std::size_t mc_api::get_remote_heap_bytes() const
 {
   RemoteSimulation& process = mc_model_checker->get_remote_simulation();
index 66e3cde..15bd595 100644 (file)
@@ -54,6 +54,7 @@ public:
   const char* get_actor_host_name(smx_actor_t actor) const;
   bool check_send_request_detached(smx_simcall_t const& simcall) const;
   smx_actor_t get_src_actor(mc::RemotePtr<kernel::activity::CommImpl> const& comm_addr) const;
+  smx_actor_t get_dst_actor(mc::RemotePtr<kernel::activity::CommImpl> const& comm_addr) const;
 
   // REMOTE APIs
   std::size_t get_remote_heap_bytes() const;