Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Move the logic retrieving the actor info in the App to RemoteProcess
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 14 Mar 2021 15:15:15 +0000 (16:15 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 14 Mar 2021 20:05:02 +0000 (21:05 +0100)
src/mc/mc_smx.cpp
src/mc/remote/RemoteProcess.cpp
src/mc/remote/RemoteProcess.hpp

index abb9d42..337c820 100644 (file)
@@ -66,24 +66,12 @@ void RemoteProcess::refresh_simix()
   if (this->cache_flags_ & RemoteProcess::cache_simix_processes)
     return;
 
-  // TODO, avoid to reload `&simix_global`, `simix_global`, `*simix_global`
+  RemotePtr<s_xbt_dynar_t> actor_vector;
+  RemotePtr<s_xbt_dynar_t> dead_actor_vector;
+  get_actor_vectors(actor_vector, dead_actor_vector);
 
-  static_assert(std::is_same<
-      std::unique_ptr<simgrid::simix::Global>,
-      decltype(simix_global)
-    >::value, "Unexpected type for simix_global");
-  static_assert(sizeof(simix_global) == sizeof(simgrid::simix::Global*),
-    "Bad size for simix_global");
-
-  RemotePtr<simgrid::simix::Global> simix_global_p{this->read_variable<simgrid::simix::Global*>("simix_global")};
-
-  // simix_global = REMOTE(*simix_global)
-  Remote<simgrid::simix::Global> simix_global =
-    this->read<simgrid::simix::Global>(simix_global_p);
-
-  MC_process_refresh_simix_actor_dynar(this, this->smx_actors_infos, remote(simix_global.get_buffer()->actors_vector));
-  MC_process_refresh_simix_actor_dynar(this, this->smx_dead_actors_infos,
-                                       remote(simix_global.get_buffer()->dead_actors_vector));
+  MC_process_refresh_simix_actor_dynar(this, this->smx_actors_infos, actor_vector);
+  MC_process_refresh_simix_actor_dynar(this, this->smx_dead_actors_infos, dead_actor_vector);
 
   this->cache_flags_ |= RemoteProcess::cache_simix_processes;
 }
index dd80f7e..0b9b6e9 100644 (file)
@@ -583,5 +583,18 @@ unsigned long RemoteProcess::get_maxpid() const
   return maxpid;
 }
 
+void RemoteProcess::get_actor_vectors(RemotePtr<s_xbt_dynar_t>& actors, RemotePtr<s_xbt_dynar_t>& dead_actors)
+{
+  static_assert(std::is_same<std::unique_ptr<simgrid::simix::Global>, decltype(simix_global)>::value,
+                "Unexpected type for simix_global");
+  static_assert(sizeof(simix_global) == sizeof(simgrid::simix::Global*), "Bad size for simix_global");
+
+  // TODO, avoid to reload `&simix_global`, `simix_global`, `*simix_global`
+  RemotePtr<simgrid::simix::Global> simix_global_p{this->read_variable<simgrid::simix::Global*>("simix_global")};
+  Remote<simgrid::simix::Global> simix_global = this->read<simgrid::simix::Global>(simix_global_p);
+
+  actors      = remote(simix_global.get_buffer()->actors_vector);
+  dead_actors = remote(simix_global.get_buffer()->dead_actors_vector);
+}
 } // namespace mc
 } // namespace simgrid
index 78bb6b7..d0d53cb 100644 (file)
@@ -195,6 +195,7 @@ public:
   }
 
   unsigned long get_maxpid() const;
+  void get_actor_vectors(RemotePtr<s_xbt_dynar_t>& actors, RemotePtr<s_xbt_dynar_t>& dead_actors);
 
   void dump_stack() const;