Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Preserve on_exit funcions between restarts.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 23 Apr 2019 20:43:12 +0000 (22:43 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 24 Apr 2019 07:24:00 +0000 (09:24 +0200)
Add a member "on_exit" to kernel::actor::ProcessArg.
Fix Framagit isssue #11.

ChangeLog
src/kernel/actor/ActorImpl.cpp
src/kernel/actor/ActorImpl.hpp
src/surf/HostImpl.cpp

index 31b3790..c269e5e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,7 @@ XBT:
 
 Fixed bugs (GH=GitHub; FG=FramaGit):
  - FG#10: Can not use MSG_process_set_data from SMPI any more
+ - FG#11: Auto-restart actors forget their on_exit behavior
  - GH#133: Java : a process can run on a VM even if its host is off
  - GH#326: Valgrind-detected error for join() when energy plugin is activated
 
index 8b3f02d..99b32d2 100644 (file)
@@ -333,6 +333,7 @@ s4u::Actor* ActorImpl::restart()
   // start the new actor
   ActorImplPtr actor =
       ActorImpl::create(arg.name, std::move(arg.code), arg.data, arg.host, arg.properties.get(), nullptr);
+  actor->on_exit = std::move(arg.on_exit);
   actor->set_kill_time(arg.kill_time);
   actor->set_auto_restart(arg.auto_restart);
 
index a1d027f..3394c36 100644 (file)
@@ -136,6 +136,8 @@ public:
   std::shared_ptr<const std::unordered_map<std::string, std::string>> properties = nullptr;
   bool auto_restart                                                        = false;
   bool daemon_                                                             = false;
+  std::vector<std::function<void(bool)>> on_exit; /* list of functions executed when the process dies */
+
   ProcessArg()                                                             = default;
 
   explicit ProcessArg(const std::string& name, const std::function<void()>& code, void* data, s4u::Host* host,
@@ -159,6 +161,7 @@ public:
       , kill_time(actor->get_kill_time())
       , auto_restart(actor->has_to_auto_restart())
       , daemon_(actor->is_daemon())
+      , on_exit(actor->on_exit)
   {
     properties.reset(actor->get_properties(), [](decltype(actor->get_properties())) {});
   }
index 088e848..f2b102c 100644 (file)
@@ -105,6 +105,7 @@ void HostImpl::turn_on()
     XBT_DEBUG("Booting Actor %s(%s) right now", arg->name.c_str(), arg->host->get_cname());
     simgrid::kernel::actor::ActorImplPtr actor = simgrid::kernel::actor::ActorImpl::create(
         arg->name.c_str(), arg->code, nullptr, arg->host, arg->properties.get(), nullptr);
+    actor->on_exit = arg->on_exit;
     if (arg->kill_time >= 0)
       actor->set_kill_time(arg->kill_time);
     if (arg->auto_restart)