From a49dc3ed413f7a3ac4a03fb7593bdbebf3f19f5b Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Thu, 7 Mar 2019 17:32:41 +0100 Subject: [PATCH] Use references for callback parameters of on_exit(). --- include/simgrid/s4u/Actor.hpp | 10 +++++----- include/simgrid/simix.h | 4 ++-- src/s4u/s4u_Actor.cpp | 11 ++++++++--- src/simix/ActorImpl.cpp | 2 +- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/include/simgrid/s4u/Actor.hpp b/include/simgrid/s4u/Actor.hpp index d1b68c70d6..f3d91d1aff 100644 --- a/include/simgrid/s4u/Actor.hpp +++ b/include/simgrid/s4u/Actor.hpp @@ -236,7 +236,7 @@ public: * 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 fun); + void on_exit(const std::function& fun); /** Sets the time at which that actor should be killed */ void set_kill_time(double time); @@ -295,8 +295,8 @@ public: 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 fun, - void* data); + XBT_ATTRIB_DEPRECATED_v325("Please use Actor::on_exit(fun) instead") void on_exit( + const std::function& fun, void* data); XBT_ATTRIB_DEPRECATED_v325("Please use Actor::by_pid(pid).kill() instead") static void kill(aid_t pid); @@ -543,7 +543,7 @@ XBT_PUBLIC void exit(); * while it will remain to false if the actor terminated gracefully. */ -XBT_PUBLIC void on_exit(std::function fun); +XBT_PUBLIC void on_exit(const std::function& fun); /** @brief Migrate the current actor to a new host. */ XBT_PUBLIC void migrate(Host* new_host); @@ -552,7 +552,7 @@ XBT_PUBLIC void migrate(Host* new_host); #ifndef DOXYGEN XBT_ATTRIB_DEPRECATED_v325("Please use std::function for first parameter.") XBT_PUBLIC - void on_exit(std::function fun, void* data); + void on_exit(const std::function& fun, void* data); /** @deprecated Please use std::function for first parameter */ XBT_ATTRIB_DEPRECATED_v323("Please use std::function for first parameter.") XBT_PUBLIC diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index b3c41fbfc9..25a83c607a 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -152,8 +152,8 @@ XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, int_f_pvoid_pvoid_t f SG_END_DECL() #ifdef __cplusplus -XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, std::function fun, - void* data); +XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, + const std::function& fun, void* data); #endif /****************************** Communication *********************************/ diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index d4ecc67bea..b97212a5df 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -107,7 +107,12 @@ void Actor::on_exit(int_f_pvoid_pvoid_t fun, simgrid::simix::simcall([this, fun, data] { SIMIX_process_on_exit(pimpl_, fun, data); }); } -void Actor::on_exit(std::function const fun) +void Actor::on_exit(const std::function& fun, void* data) /* deprecated */ +{ + on_exit([fun, data](bool exit) { fun(exit, data); }); +} + +void Actor::on_exit(const std::function& fun) { simgrid::simix::simcall( [this, fun] { SIMIX_process_on_exit(pimpl_, [fun](int a, void* /*data*/) { fun(a != 0); }, nullptr); }); @@ -432,12 +437,12 @@ void exit() simgrid::simix::simcall([actor] { actor->exit(); }); } -void on_exit(std::function const fun) +void on_exit(const std::function& fun) { SIMIX_process_self()->iface()->on_exit(fun); } -void on_exit(std::function const fun, void* data) /* deprecated */ +void on_exit(const std::function& fun, void* data) /* deprecated */ { SIMIX_process_self()->iface()->on_exit([fun, data](bool exit) { fun(exit, data); }); } diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index a9e3b1c2ca..3b64841d6a 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -706,7 +706,7 @@ void SIMIX_process_on_exit(smx_actor_t actor, int_f_pvoid_pvoid_t fun, void* dat 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 fun, void* data) +void SIMIX_process_on_exit(smx_actor_t actor, const std::function& fun, void* data) { xbt_assert(actor, "current process not found: are you in maestro context ?"); -- 2.20.1