- :cpp:func:`Comm::on_send <simgrid::s4u::Comm::on_send_cb>`
:cpp:func:`Comm::on_recv <simgrid::s4u::Comm::on_recv_cb>`
- :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_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_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_suspend <simgrid::s4u::Io::on_suspend_cb>`
:cpp:func:`Io::on_resume <simgrid::s4u::Io::on_resume_cb>`
protected:
static xbt::signal<void(Comm const&)> on_send;
static xbt::signal<void(Comm const&)> on_recv;
- static xbt::signal<void(Comm const&)> on_start;
+ inline static xbt::signal<void(Comm const&)> on_start;
+ xbt::signal<void(Comm const&)> on_this_start;
void fire_on_completion() const override {
/* The completion signal of a Comm has to be thrown only once and not by the sender AND the receiver.
static void on_send_cb(const std::function<void(Comm const&)>& cb) { on_send.connect(cb); }
static void on_recv_cb(const std::function<void(Comm const&)>& cb) { on_recv.connect(cb); }
static void on_start_cb(const std::function<void(Comm const&)>& cb) { on_start.connect(cb); }
+ void on_this_start_cb(const std::function<void(Comm const&)>& cb) { on_this_start.connect(cb); }
CommPtr set_copy_data_callback(const std::function<void(kernel::activity::CommImpl*, void*, size_t)>& callback);
XBT_ATTRIB_DEPRECATED_v337("Please manifest if you actually need this function") static void copy_buffer_callback(
void reset() const;
- static xbt::signal<void(Exec const&)> on_start;
+ 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_veto() const override { on_veto(const_cast<Exec&>(*this)); }
void fire_on_suspend() const override { on_suspend(*this); }
#endif
/*! Signal fired each time that an execution actually starts (no veto) */
static void on_start_cb(const std::function<void(Exec const&)>& cb) { on_start.connect(cb); }
+ void on_this_start_cb(const std::function<void(Exec const&)>& cb) { on_this_start.connect(cb); }
static ExecPtr init();
friend kernel::EngineImpl;
#endif
- static xbt::signal<void(Io const&)> on_start;
+ inline static xbt::signal<void(Io const&)> on_start;
+ xbt::signal<void(Io const&)> on_this_start;
protected:
explicit Io(kernel::activity::IoImplPtr pimpl);
enum class OpType { READ, WRITE };
static void on_start_cb(const std::function<void(Io const&)>& cb) { on_start.connect(cb); }
+ void on_this_start_cb(const std::function<void(Io const&)>& cb) { on_this_start.connect(cb); }
static IoPtr init();
/*! take a vector of s4u::IoPtr and return when one of them is finished.
namespace simgrid::s4u {
xbt::signal<void(Comm const&)> Comm::on_send;
xbt::signal<void(Comm const&)> Comm::on_recv;
-xbt::signal<void(Comm const&)> Comm::on_start;
CommPtr Comm::set_copy_data_callback(const std::function<void(kernel::activity::CommImpl*, void*, size_t)>& callback)
{
pimpl_->set_iface(this);
pimpl_->set_actor(sender_);
// Only throw the signal when both sides are here and the status is READY
- if (pimpl_->get_state() != kernel::activity::State::WAITING)
+ if (pimpl_->get_state() != kernel::activity::State::WAITING) {
on_start(*this);
+ on_this_start(*this);
+ }
}
state_ = State::STARTED;
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_exec, s4u_activity, "S4U asynchronous executions");
namespace simgrid::s4u {
-xbt::signal<void(Exec const&)> Exec::on_start;
Exec::Exec(kernel::activity::ExecImplPtr pimpl)
{
state_ = State::STARTED;
on_start(*this);
+ on_this_start(*this);
return this;
}
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_io, s4u_activity, "S4U asynchronous I/Os");
namespace simgrid::s4u {
-xbt::signal<void(Io const&)> Io::on_start;
Io::Io(kernel::activity::IoImplPtr pimpl)
{
state_ = State::STARTED;
on_start(*this);
+ on_this_start(*this);
return this;
}