* It will be set to true if the actor was killed or failed because of an exception,
* while it will remain to false if the actor terminated gracefully.
*/
- void on_exit(std::function<void(bool /*failed*/)> fun);
+ void on_exit(const std::function<void(bool /*failed*/)>& fun);
/** Sets the time at which that actor should be killed */
void set_kill_time(double time);
void set_property(const std::string& key, std::string value);
#ifndef DOXYGEN
- XBT_ATTRIB_DEPRECATED_v325("Please use Actor::on_exit(fun) instead") void on_exit(std::function<void(int, void*)> fun,
- void* data);
+ XBT_ATTRIB_DEPRECATED_v325("Please use Actor::on_exit(fun) instead") void on_exit(
+ const std::function<void(int, void*)>& fun, void* data);
XBT_ATTRIB_DEPRECATED_v325("Please use Actor::by_pid(pid).kill() instead") static void kill(aid_t pid);
* while it will remain to false if the actor terminated gracefully.
*/
-XBT_PUBLIC void on_exit(std::function<void(bool)> fun);
+XBT_PUBLIC void on_exit(const std::function<void(bool)>& fun);
/** @brief Migrate the current actor to a new host. */
XBT_PUBLIC void migrate(Host* new_host);
#ifndef DOXYGEN
XBT_ATTRIB_DEPRECATED_v325("Please use std::function<void(bool)> for first parameter.") XBT_PUBLIC
- void on_exit(std::function<void(int, void*)> fun, void* data);
+ void on_exit(const std::function<void(int, void*)>& fun, void* data);
/** @deprecated Please use std::function<void(int, void*)> for first parameter */
XBT_ATTRIB_DEPRECATED_v323("Please use std::function<void(bool)> for first parameter.") XBT_PUBLIC
SG_END_DECL()
#ifdef __cplusplus
-XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, std::function<void(bool /*failed*/, void* /*data*/)> fun,
- void* data);
+XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process,
+ const std::function<void(bool /*failed*/, void* /*data*/)>& fun, void* data);
#endif
/****************************** Communication *********************************/
simgrid::simix::simcall([this, fun, data] { SIMIX_process_on_exit(pimpl_, fun, data); });
}
-void Actor::on_exit(std::function<void(bool /*failed*/)> const fun)
+void Actor::on_exit(const std::function<void(int, void*)>& fun, void* data) /* deprecated */
+{
+ on_exit([fun, data](bool exit) { fun(exit, data); });
+}
+
+void Actor::on_exit(const std::function<void(bool /*failed*/)>& fun)
{
simgrid::simix::simcall(
[this, fun] { SIMIX_process_on_exit(pimpl_, [fun](int a, void* /*data*/) { fun(a != 0); }, nullptr); });
simgrid::simix::simcall([actor] { actor->exit(); });
}
-void on_exit(std::function<void(bool)> const fun)
+void on_exit(const std::function<void(bool)>& fun)
{
SIMIX_process_self()->iface()->on_exit(fun);
}
-void on_exit(std::function<void(int, void*)> const fun, void* data) /* deprecated */
+void on_exit(const std::function<void(int, void*)>& fun, void* data) /* deprecated */
{
SIMIX_process_self()->iface()->on_exit([fun, data](bool exit) { fun(exit, data); });
}
SIMIX_process_on_exit(actor, [fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data);
}
-void SIMIX_process_on_exit(smx_actor_t actor, std::function<void(bool, void*)> fun, void* data)
+void SIMIX_process_on_exit(smx_actor_t actor, const std::function<void(bool, void*)>& fun, void* data)
{
xbt_assert(actor, "current process not found: are you in maestro context ?");