From 9adb31255b20101096e6c7ac09e6641c3cb82557 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sat, 26 Jan 2019 19:09:51 +0100 Subject: [PATCH] Automatic refcounting on the src and dst actors of a comm --- src/kernel/activity/CommImpl.cpp | 4 ++-- src/kernel/activity/CommImpl.hpp | 11 ++++++----- src/kernel/context/Context.cpp | 4 ++-- src/mc/checker/CommunicationDeterminismChecker.cpp | 8 ++++---- src/mc/mc_request.cpp | 12 ++++++------ src/simix/ActorImpl.cpp | 1 - 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/kernel/activity/CommImpl.cpp b/src/kernel/activity/CommImpl.cpp index 8b387602e6..b2a0f01e64 100644 --- a/src/kernel/activity/CommImpl.cpp +++ b/src/kernel/activity/CommImpl.cpp @@ -110,8 +110,8 @@ void simgrid::kernel::activity::CommImpl::post() } else state_ = SIMIX_DONE; - XBT_DEBUG("SIMIX_post_comm: comm %p, state %d, src_proc %p, dst_proc %p, detached: %d", this, (int)state_, src_proc, - dst_proc, detached); + XBT_DEBUG("SIMIX_post_comm: comm %p, state %d, src_proc %p, dst_proc %p, detached: %d", this, (int)state_, + src_proc.get(), dst_proc.get(), detached); /* destroy the surf actions associated with the Simix communication */ cleanupSurf(); diff --git a/src/kernel/activity/CommImpl.hpp b/src/kernel/activity/CommImpl.hpp index 1143b3a77d..e4eded95b1 100644 --- a/src/kernel/activity/CommImpl.hpp +++ b/src/kernel/activity/CommImpl.hpp @@ -7,6 +7,7 @@ #define SIMGRID_KERNEL_ACTIVITY_COMM_HPP #include "src/kernel/activity/ActivityImpl.hpp" +#include "src/simix/ActorImpl.hpp" #include "surf/surf.hpp" enum e_smx_comm_type_t { SIMIX_COMM_SEND, SIMIX_COMM_RECEIVE, SIMIX_COMM_READY, SIMIX_COMM_DONE }; @@ -45,11 +46,11 @@ expectations of the other side, too. See */ void (*copy_data_fun)(smx_activity_t, void*, size_t) = nullptr; /* Surf action data */ - simgrid::kernel::resource::Action* surfAction_ = nullptr; /* The Surf communication action encapsulated */ - simgrid::kernel::resource::Action* src_timeout = nullptr; /* Surf's actions to instrument the timeouts */ - simgrid::kernel::resource::Action* dst_timeout = nullptr; /* Surf's actions to instrument the timeouts */ - smx_actor_t src_proc = nullptr; - smx_actor_t dst_proc = nullptr; + resource::Action* surfAction_ = nullptr; /* The Surf communication action encapsulated */ + resource::Action* src_timeout = nullptr; /* Surf's actions to instrument the timeouts */ + resource::Action* dst_timeout = nullptr; /* Surf's actions to instrument the timeouts */ + actor::ActorImplPtr src_proc = nullptr; + actor::ActorImplPtr dst_proc = nullptr; double rate = 0.0; double task_size = 0.0; diff --git a/src/kernel/context/Context.cpp b/src/kernel/context/Context.cpp index c2ea68ac9f..5ed694f733 100644 --- a/src/kernel/context/Context.cpp +++ b/src/kernel/context/Context.cpp @@ -107,12 +107,12 @@ void Context::stop() if (comm->src_proc == actor_) { XBT_DEBUG("Found an unfinished send comm %p (detached = %d), state %d, src = %p, dst = %p", comm.get(), - comm->detached, (int)comm->state_, comm->src_proc, comm->dst_proc); + comm->detached, (int)comm->state_, comm->src_proc.get(), comm->dst_proc.get()); comm->src_proc = nullptr; } else if (comm->dst_proc == actor_) { XBT_DEBUG("Found an unfinished recv comm %p, state %d, src = %p, dst = %p", comm.get(), (int)comm->state_, - comm->src_proc, comm->dst_proc); + comm->src_proc.get(), comm->dst_proc.get()); comm->dst_proc = nullptr; if (comm->detached && comm->src_proc != nullptr) { diff --git a/src/mc/checker/CommunicationDeterminismChecker.cpp b/src/mc/checker/CommunicationDeterminismChecker.cpp index a049e86514..b9c015e6e6 100644 --- a/src/mc/checker/CommunicationDeterminismChecker.cpp +++ b/src/mc/checker/CommunicationDeterminismChecker.cpp @@ -100,8 +100,8 @@ static void update_comm_pattern(simgrid::mc::PatternCommunication* comm_pattern, mc_model_checker->process().read(temp_comm, comm_addr); simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer(); - smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->src_proc)); - smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc)); + smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->src_proc.get())); + smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc.get())); comm_pattern->src_proc = src_proc->pid_; comm_pattern->dst_proc = dst_proc->pid_; comm_pattern->src_host = MC_smx_actor_get_host_name(src_proc); @@ -193,7 +193,7 @@ void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_sim char* remote_name = mc_model_checker->process().read( RemotePtr((uint64_t)(synchro->mbox ? &synchro->mbox->name_ : &synchro->mbox_cpy->name_))); pattern->rdv = mc_model_checker->process().read_string(RemotePtr(remote_name)); - pattern->src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(synchro->src_proc))->pid_; + pattern->src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(synchro->src_proc.get()))->pid_; pattern->src_host = MC_smx_actor_get_host_name(issuer); #if HAVE_SMPI @@ -243,7 +243,7 @@ void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_sim &remote_name, remote(comm->mbox ? &simgrid::xbt::string::to_string_data(comm->mbox->name_).data : &simgrid::xbt::string::to_string_data(comm->mbox_cpy->name_).data)); pattern->rdv = mc_model_checker->process().read_string(RemotePtr(remote_name)); - pattern->dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc))->pid_; + pattern->dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc.get()))->pid_; pattern->dst_host = MC_smx_actor_get_host_name(issuer); } else xbt_die("Unexpected call_type %i", (int) call_type); diff --git a/src/mc/mc_request.cpp b/src/mc/mc_request.cpp index 79f88a26bb..813b2305ce 100644 --- a/src/mc/mc_request.cpp +++ b/src/mc/mc_request.cpp @@ -271,8 +271,8 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid } else act = remote_act; - smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->src_proc)); - smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->dst_proc)); + smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->src_proc.get())); + smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->dst_proc.get())); args = bprintf("comm=%s [(%ld)%s (%s)-> (%ld)%s (%s)]", p, src_proc ? src_proc->pid_ : 0, src_proc ? MC_smx_actor_get_host_name(src_proc) : "", src_proc ? MC_smx_actor_get_name(src_proc) : "", @@ -304,8 +304,8 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid type = "Test TRUE"; p = pointer_to_string(remote_act); - smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->src_proc)); - smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->dst_proc)); + smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->src_proc.get())); + smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(act->dst_proc.get())); args = bprintf("comm=%s [(%ld)%s (%s) -> (%ld)%s (%s)]", p, src_proc->pid_, MC_smx_actor_get_name(src_proc), MC_smx_actor_get_host_name(src_proc), dst_proc->pid_, MC_smx_actor_get_name(dst_proc), MC_smx_actor_get_host_name(dst_proc)); @@ -477,8 +477,8 @@ std::string request_get_dot_output(smx_simcall_t req, int value) remote(static_cast(remote_act))); simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer(); - smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->src_proc)); - smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc)); + smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->src_proc.get())); + smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc.get())); if (issuer->host_) label = simgrid::xbt::string_printf("[(%ld)%s] Wait [(%ld)->(%ld)]", issuer->pid_, MC_smx_actor_get_host_name(issuer), src_proc ? src_proc->pid_ : 0, diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 93c18e44bc..3da85bf27c 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -97,7 +97,6 @@ void SIMIX_process_empty_trash() } namespace simgrid { - namespace kernel { namespace actor { -- 2.20.1