Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add on_this_completion signal to Activities
authorFred Suter <suterf@ornl.gov>
Wed, 31 May 2023 20:03:55 +0000 (16:03 -0400)
committerFred Suter <suterf@ornl.gov>
Wed, 31 May 2023 20:07:52 +0000 (16:07 -0400)
docs/source/Plugins.rst
include/simgrid/s4u/Activity.hpp
include/simgrid/s4u/Comm.hpp
include/simgrid/s4u/Exec.hpp
include/simgrid/s4u/Io.hpp
src/kernel/activity/CommImpl.cpp

index d0a24a3..0a9669f 100644 (file)
@@ -137,18 +137,21 @@ Partial list of existing signals in s4u:
   - :cpp:func:`Comm::on_start <simgrid::s4u::Comm::on_start_cb>`
     :cpp:func:`Comm::on_this_start <simgrid::s4u::Comm::on_this_start_cb>`
     :cpp:func:`Comm::on_completion <simgrid::s4u::Comm::on_completion_cb>`
+    :cpp:func:`Comm::on_this_completion <simgrid::s4u::Comm::on_this_completion_cb>`
     :cpp:func:`Comm::on_suspend <simgrid::s4u::Comm::on_suspend_cb>`
     :cpp:func:`Comm::on_resume <simgrid::s4u::Comm::on_resume_cb>`
     :cpp:func:`Comm::on_veto <simgrid::s4u::Comm::on_veto_cb>`
   - :cpp:func:`Exec::on_start <simgrid::s4u::Exec::on_start_cb>`
     :cpp:func:`Exec::on_this_start <simgrid::s4u::Exec::on_this_start_cb>`
     :cpp:func:`Exec::on_completion <simgrid::s4u::Exec::on_completion_cb>`
+    :cpp:func:`Exec::on_this_completion <simgrid::s4u::Exec::on_this_completion_cb>`
     :cpp:func:`Exec::on_suspend <simgrid::s4u::Exec::on_suspend_cb>`
     :cpp:func:`Exec::on_resume <simgrid::s4u::Exec::on_resume_cb>`
     :cpp:func:`Exec::on_veto <simgrid::s4u::Exec::on_veto_cb>`
   - :cpp:func:`Io::on_start <simgrid::s4u::Io::on_start_cb>`
     :cpp:func:`Io::on_this_start <simgrid::s4u::Io::on_this_start_cb>`
     :cpp:func:`Io::on_completion <simgrid::s4u::Io::on_completion_cb>`
+    :cpp:func:`Io::on_this_completion <simgrid::s4u::Io::on_this_completion_cb>`
     :cpp:func:`Io::on_suspend <simgrid::s4u::Io::on_suspend_cb>`
     :cpp:func:`Io::on_resume <simgrid::s4u::Io::on_resume_cb>`
     :cpp:func:`Io::on_veto <simgrid::s4u::Io::on_veto_cb>`
index fb157dd..1f8a7ca 100644 (file)
@@ -105,6 +105,7 @@ protected:
   Activity* set_remaining(double remains);
 
   virtual void fire_on_completion() const = 0;
+  virtual void fire_on_this_completion() const = 0;
   virtual void fire_on_veto() const = 0;
   virtual void fire_on_suspend() const = 0;
   virtual void fire_on_resume() const = 0;
@@ -134,6 +135,7 @@ public:
     ActivityPtr keepalive(this);
     state_ = state;
     fire_on_completion();
+    fire_on_this_completion();
     if (state == State::FINISHED)
       release_dependencies();
   }
@@ -233,6 +235,7 @@ template <class AnyActivity> class Activity_T : public Activity {
 
 protected:
   inline static xbt::signal<void(AnyActivity const&)> on_completion;
+  xbt::signal<void(AnyActivity const&)> on_this_completion;
   inline static xbt::signal<void(AnyActivity&)> on_veto;
   inline static xbt::signal<void(AnyActivity const&)> on_suspend;
   inline static xbt::signal<void(AnyActivity const&)> on_resume;
@@ -240,6 +243,7 @@ protected:
 public:
   /*! Add a callback fired when the activity completes (either normally, cancelled or failed) */
   static void on_completion_cb(const std::function<void(AnyActivity const&)>& cb) { on_completion.connect(cb); }
+  static void on_this_completion_cb(const std::function<void(AnyActivity const&)>& cb) { on_this_completion.connect(cb); }
   /*! Add a callback fired each time that the activity fails to start because of a veto (e.g., unsolved dependency or no
    * resource assigned) */
   static void on_veto_cb(const std::function<void(AnyActivity&)>& cb) { on_veto.connect(cb); }
index 72be440..0226ec6 100644 (file)
@@ -50,6 +50,11 @@ protected:
        then Comm::on_completion is thrown in the kernel in CommImpl::finish.
      */
   }
+  void fire_on_this_completion() const override {
+    /* The completion signal of a Comm has to be thrown only once and not by the sender AND the receiver.
+       then Comm::on_completion is thrown in the kernel in CommImpl::finish.
+     */
+  }
   void fire_on_veto() const override { on_veto(const_cast<Comm&>(*this)); }
   void fire_on_suspend() const override { on_suspend(*this); }
   void fire_on_resume() const override { on_resume(*this); }
index 1d1048a..b544f09 100644 (file)
@@ -45,6 +45,7 @@ protected:
   inline static xbt::signal<void(Exec const&)> on_start;
   xbt::signal<void(Exec const&)> on_this_start;
   void fire_on_completion() const override { on_completion(*this); }
+  void fire_on_this_completion() const override { on_this_completion(*this); }
   void fire_on_veto() const override { on_veto(const_cast<Exec&>(*this)); }
   void fire_on_suspend() const override { on_suspend(*this); }
   void fire_on_resume() const override { on_resume(*this); }
index 462554e..a773d0c 100644 (file)
@@ -31,6 +31,7 @@ protected:
   explicit Io(kernel::activity::IoImplPtr pimpl);
   Io* do_start() override;
   void fire_on_completion() const override { on_completion(*this); }
+  void fire_on_this_completion() const override { on_this_completion(*this); }
   void fire_on_veto() const override { on_veto(const_cast<Io&>(*this)); }
   void fire_on_suspend() const override { on_suspend(*this); }
   void fire_on_resume() const override { on_resume(*this); }
index 7a9ef04..ad1c7fe 100644 (file)
@@ -470,7 +470,9 @@ void CommImpl::finish()
   XBT_DEBUG("CommImpl::finish() comm %p, state %s, src_proc %p, dst_proc %p, detached: %d", this, get_state_str(),
             src_actor_.get(), dst_actor_.get(), detached_);
 
-  s4u::Comm::on_completion(static_cast<const s4u::Comm&>(*this->get_iface()));
+  auto* piface = static_cast<const s4u::Comm*>(this->get_iface());
+  s4u::Comm::on_completion(*piface);
+  piface->on_this_completion(*piface);
 
   /* Update synchro state */
   if (src_timeout_ && src_timeout_->get_state() == resource::Action::State::FINISHED)