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_));
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();
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;