Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Automatic refcounting on the src and dst actors of a comm
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 26 Jan 2019 18:09:51 +0000 (19:09 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 26 Jan 2019 20:20:29 +0000 (21:20 +0100)
src/kernel/activity/CommImpl.cpp
src/kernel/activity/CommImpl.hpp
src/kernel/context/Context.cpp
src/mc/checker/CommunicationDeterminismChecker.cpp
src/mc/mc_request.cpp
src/simix/ActorImpl.cpp

index 8b38760..b2a0f01 100644 (file)
@@ -110,8 +110,8 @@ void simgrid::kernel::activity::CommImpl::post()
   } else
     state_ = SIMIX_DONE;
 
   } 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();
 
   /* destroy the surf actions associated with the Simix communication */
   cleanupSurf();
index 1143b3a..e4eded9 100644 (file)
@@ -7,6 +7,7 @@
 #define SIMGRID_KERNEL_ACTIVITY_COMM_HPP
 
 #include "src/kernel/activity/ActivityImpl.hpp"
 #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 };
 #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 */
   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;
 
   double rate               = 0.0;
   double task_size          = 0.0;
 
index c2ea68a..5ed694f 100644 (file)
@@ -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(),
 
     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 = 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) {
       comm->dst_proc = nullptr;
 
       if (comm->detached && comm->src_proc != nullptr) {
index a049e86..b9c015e 100644 (file)
@@ -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();
 
   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);
   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<char*>(
         RemotePtr<char*>((uint64_t)(synchro->mbox ? &synchro->mbox->name_ : &synchro->mbox_cpy->name_)));
     pattern->rdv      = mc_model_checker->process().read_string(RemotePtr<char>(remote_name));
     char* remote_name = mc_model_checker->process().read<char*>(
         RemotePtr<char*>((uint64_t)(synchro->mbox ? &synchro->mbox->name_ : &synchro->mbox_cpy->name_)));
     pattern->rdv      = mc_model_checker->process().read_string(RemotePtr<char>(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
     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<char>(remote_name));
         &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<char>(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);
     pattern->dst_host = MC_smx_actor_get_host_name(issuer);
   } else
     xbt_die("Unexpected call_type %i", (int) call_type);
index 79f88a2..813b230 100644 (file)
@@ -271,8 +271,8 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid
       } else
         act = remote_act;
 
       } 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) : "",
       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);
 
       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));
       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<simgrid::kernel::activity::CommImpl*>(remote_act)));
       simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer();
 
                                        remote(static_cast<simgrid::kernel::activity::CommImpl*>(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,
       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,
index 93c18e4..3da85bf 100644 (file)
@@ -97,7 +97,6 @@ void SIMIX_process_empty_trash()
 }
 
 namespace simgrid {
 }
 
 namespace simgrid {
-
 namespace kernel {
 namespace actor {
 
 namespace kernel {
 namespace actor {