pattern->src_host = mc_api::get().get_actor_host_name(issuer);
#if HAVE_SMPI
- simgrid::smpi::Request mpi_request;
- mc_model_checker->get_remote_simulation().read(
- &mpi_request, remote(static_cast<smpi::Request*>(simcall_comm_isend__get__data(request))));
- // pattern->tag = mpi_request.tag();
pattern->tag = mcapi::get().get_smpi_request_tag(request, simgrid::simix::Simcall::COMM_ISEND);
#endif
auto pattern_data = mcapi::get().get_pattern_comm_data(pattern->comm_addr);
#if HAVE_SMPI
pattern->tag = mcapi::get().get_smpi_request_tag(request, simgrid::simix::Simcall::COMM_IRECV);
#endif
- Remote<kernel::activity::CommImpl> temp_comm;
- mc_model_checker->get_remote_simulation().read(temp_comm, remote(pattern->comm_addr));
- const kernel::activity::CommImpl* comm = temp_comm.get_buffer();
-
- char* remote_name;
- mc_model_checker->get_remote_simulation().read(
- &remote_name, remote(comm->get_mailbox() ? &xbt::string::to_string_data(comm->get_mailbox()->name_).data
- : &xbt::string::to_string_data(comm->mbox_cpy->name_).data));
- pattern->rdv = mc_model_checker->get_remote_simulation().read_string(RemotePtr<char>(remote_name));
- pattern->dst_proc =
- mc_model_checker->get_remote_simulation().resolve_actor(mc::remote(comm->dst_actor_.get()))->get_pid();
- pattern->dst_host = MC_smx_actor_get_host_name(issuer);
+ auto comm_addr = pattern->comm_addr;
+ pattern->rdv = mcapi::get().get_pattern_comm_rdv(comm_addr);
+ pattern->dst_proc = mcapi::get().get_pattern_comm_dst_proc(comm_addr);
+ pattern->dst_host = mcapi::get().get_actor_host_name(issuer);
} else
xbt_die("Unexpected call_type %i", (int)call_type);
return src_proc;
}
+unsigned long mc_api::get_pattern_comm_dst_proc(void* addr) const
+{
+ Remote<kernel::activity::CommImpl> temp_synchro;
+ mc_model_checker->get_remote_simulation().read(temp_synchro, remote((simgrid::kernel::activity::CommImpl*)addr));
+ const kernel::activity::CommImpl* synchro = temp_synchro.get_buffer();
+ auto src_proc = mc_model_checker->get_remote_simulation().resolve_actor(mc::remote(synchro->dst_actor_.get()))->get_pid();
+ return src_proc;
+}
+
std::vector<char> mc_api::get_pattern_comm_data(void* addr) const
{
Remote<kernel::activity::CommImpl> temp_synchro;
kernel::activity::CommImpl* get_pattern_comm_addr(smx_simcall_t request) const;
std::string get_pattern_comm_rdv(void* addr) const;
unsigned long get_pattern_comm_src_proc(void* addr) const;
+ unsigned long get_pattern_comm_dst_proc(void* addr) const;
std::vector<char> get_pattern_comm_data(void* addr) const;
const char* get_actor_host_name(smx_actor_t actor) const;