Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use references for callback parameters of on_exit().
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 7 Mar 2019 16:32:41 +0000 (17:32 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 8 Mar 2019 11:12:45 +0000 (12:12 +0100)
include/simgrid/s4u/Actor.hpp
include/simgrid/simix.h
src/s4u/s4u_Actor.cpp
src/simix/ActorImpl.cpp

index d1b68c7..f3d91d1 100644 (file)
@@ -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.
    */
    * 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);
 
   /** 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
   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);
 
 
   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.
  */
 
  * 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);
 
 /** @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<void(bool)> for first parameter.") XBT_PUBLIC
 
 #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
 
 /** @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
index b3c41fb..25a83c6 100644 (file)
@@ -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
 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 *********************************/
 #endif
 
 /****************************** Communication *********************************/
index d4ecc67..b97212a 100644 (file)
@@ -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); });
 }
 
   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(
       [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(); });
 }
 
   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);
 }
 
 {
   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_self()->iface()->on_exit([fun, data](bool exit) { fun(exit, data); });
 }
index a9e3b1c..3b64841 100644 (file)
@@ -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);
 }
 
   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 ?");
 
 {
   xbt_assert(actor, "current process not found: are you in maestro context ?");