Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use a reference for ExecImpl::wait_any_for()'s vector.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 12 Apr 2021 09:42:30 +0000 (11:42 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 12 Apr 2021 09:42:30 +0000 (11:42 +0200)
src/kernel/activity/ExecImpl.cpp
src/kernel/activity/ExecImpl.hpp
src/kernel/actor/SimcallObserver.hpp
src/s4u/s4u_Exec.cpp
src/simix/libsmx.cpp

index 59ca43c..2d553a8 100644 (file)
@@ -168,9 +168,9 @@ void ExecImpl::finish()
       continue;                                 // if process handling comm is killed
     if (auto* observer =
             dynamic_cast<kernel::actor::ExecutionWaitanySimcall*>(simcall->observer_)) { // simcall is a wait_any?
-      const auto* execs = observer->get_execs();
+      const auto& execs = observer->get_execs();
 
-      for (auto* exec : *execs) {
+      for (auto* exec : execs) {
         exec->unregister_simcall(simcall);
 
         if (simcall->timeout_cb_) {
@@ -180,8 +180,8 @@ void ExecImpl::finish()
       }
 
       if (not MC_is_active() && not MC_record_replay_is_active()) {
-        auto element = std::find(execs->begin(), execs->end(), this);
-        int rank     = element != execs->end() ? static_cast<int>(std::distance(execs->begin(), element)) : -1;
+        auto element = std::find(execs.begin(), execs.end(), this);
+        int rank     = element != execs.end() ? static_cast<int>(std::distance(execs.begin(), element)) : -1;
         observer->set_result(rank);
       }
     }
@@ -237,21 +237,21 @@ ActivityImpl* ExecImpl::migrate(s4u::Host* to)
   return this;
 }
 
-void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>* execs, double timeout)
+void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>& execs, double timeout)
 {
   if (timeout < 0.0) {
     issuer->simcall_.timeout_cb_ = nullptr;
   } else {
-    issuer->simcall_.timeout_cb_ = simgrid::simix::Timer::set(SIMIX_get_clock() + timeout, [issuer, execs]() {
+    issuer->simcall_.timeout_cb_ = simgrid::simix::Timer::set(SIMIX_get_clock() + timeout, [issuer, &execs]() {
       issuer->simcall_.timeout_cb_ = nullptr;
-      for (auto* exec : *execs)
+      for (auto* exec : execs)
         exec->unregister_simcall(&issuer->simcall_);
       // default result (-1) is set in mc::ExecutionWaitanySimcall
       issuer->simcall_answer();
     });
   }
 
-  for (auto* exec : *execs) {
+  for (auto* exec : execs) {
     /* associate this simcall to the the synchro */
     exec->simcalls_.push_back(&issuer->simcall_);
 
index 1972af0..6bfc594 100644 (file)
@@ -52,7 +52,7 @@ public:
   void post() override;
   void finish() override;
 
-  static void wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>* execs, double timeout);
+  static void wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>& execs, double timeout);
 
   static xbt::signal<void(ExecImpl const&, s4u::Host*)> on_migration;
 };
index 0aea316..ad74a54 100644 (file)
@@ -146,21 +146,21 @@ public:
 class ExecutionWaitanySimcall : public SimcallObserver {
   friend kernel::activity::ExecImpl;
 
-  const std::vector<kernel::activity::ExecImpl*>* const execs_;
+  const std::vector<kernel::activity::ExecImpl*>& execs_;
   const double timeout_;
   int result_ = -1; // default result for simcall
 
   void set_result(int res) { result_ = res; }
 
 public:
-  ExecutionWaitanySimcall(smx_actor_t actor, const std::vector<kernel::activity::ExecImpl*>* execs, double timeout)
+  ExecutionWaitanySimcall(smx_actor_t actor, const std::vector<kernel::activity::ExecImpl*>& execs, double timeout)
       : SimcallObserver(actor), execs_(execs), timeout_(timeout)
   {
   }
   bool is_visible() const override { return false; }
   std::string to_string(int times_considered) const override;
   std::string dot_label() const override;
-  const std::vector<kernel::activity::ExecImpl*>* get_execs() const { return execs_; }
+  const std::vector<kernel::activity::ExecImpl*>& get_execs() const { return execs_; }
   double get_timeout() const { return timeout_; }
 
   int get_result() const { return result_; }
index 0affcec..0fe8c0a 100644 (file)
@@ -73,7 +73,7 @@ int Exec::wait_any_for(std::vector<ExecPtr>* execs, double timeout)
                  [](const ExecPtr& exec) { return static_cast<kernel::activity::ExecImpl*>(exec->pimpl_.get()); });
 
   kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
-  kernel::actor::ExecutionWaitanySimcall observer{issuer, &rexecs, timeout};
+  kernel::actor::ExecutionWaitanySimcall observer{issuer, rexecs, timeout};
   int changed_pos = kernel::actor::simcall_blocking(
       [&observer] {
         kernel::activity::ExecImpl::wait_any_for(observer.get_issuer(), observer.get_execs(), observer.get_timeout());
index 41a204b..8203c2f 100644 (file)
@@ -60,9 +60,9 @@ bool simcall_execution_test(const simgrid::kernel::activity::ActivityImplPtr& ex
 unsigned int simcall_execution_waitany_for(simgrid::kernel::activity::ExecImpl* execs[], size_t count,
                                            double timeout) // XBT_ATTRIB_DEPRECATED_v331
 {
-  std::vector<simgrid::kernel::activity::ExecImpl*> execsv(execs, execs + count);
+  std::vector<simgrid::kernel::activity::ExecImpl*> execs_vec(execs, execs + count);
   simgrid::kernel::actor::ActorImpl* issuer = simgrid::kernel::actor::ActorImpl::self();
-  simgrid::kernel::actor::ExecutionWaitanySimcall observer{issuer, &execsv, timeout};
+  simgrid::kernel::actor::ExecutionWaitanySimcall observer{issuer, execs_vec, timeout};
   return simgrid::kernel::actor::simcall_blocking(
       [&observer] {
         simgrid::kernel::activity::ExecImpl::wait_any_for(observer.get_issuer(), observer.get_execs(),