Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
set_kill_time is a method of ActorImpl
[simgrid.git] / src / simix / ActorImpl.cpp
index 2e2065b..c1d3170 100644 (file)
@@ -105,6 +105,17 @@ ActorImpl::~ActorImpl()
   delete this->context_;
 }
 
+void ActorImpl::set_kill_time(double kill_time)
+{
+  if (kill_time <= SIMIX_get_clock())
+    return;
+  XBT_DEBUG("Set kill time %f for process %s@%s", kill_time, get_cname(), host_->get_cname());
+  kill_timer = SIMIX_timer_set(kill_time, [this] {
+    SIMIX_process_kill(this, nullptr);
+    kill_timer = nullptr;
+  });
+}
+
 static void dying_daemon(int /*exit_status*/, void* data)
 {
   std::vector<ActorImpl*>* vect = &simix_global->daemons;
@@ -140,7 +151,7 @@ simgrid::s4u::Actor* ActorImpl::restart()
   // start the new process
   ActorImpl* actor =
       SIMIX_process_create(arg.name, std::move(arg.code), arg.data, arg.host, arg.properties.get(), nullptr);
-  simcall_process_set_kill_time(actor, arg.kill_time);
+  actor->set_kill_time(arg.kill_time);
   actor->set_auto_restart(arg.auto_restart);
 
   return actor->ciface();
@@ -195,8 +206,8 @@ smx_activity_t ActorImpl::sleep(double duration)
 
   simgrid::kernel::activity::SleepImpl* synchro = new simgrid::kernel::activity::SleepImpl();
   synchro->host                                 = host_;
-  synchro->surf_sleep                           = host_->pimpl_cpu->sleep(duration);
-  synchro->surf_sleep->set_data(synchro);
+  synchro->surf_action_                         = host_->pimpl_cpu->sleep(duration);
+  synchro->surf_action_->set_data(synchro);
   XBT_DEBUG("Create sleep synchronization %p", synchro);
 
   return synchro;
@@ -462,8 +473,8 @@ void SIMIX_process_kill(smx_actor_t actor, smx_actor_t issuer)
       if (i != actor->waiting_synchro->simcalls_.end())
         actor->waiting_synchro->simcalls_.remove(&actor->simcall);
     } else if (sleep != nullptr) {
-      if (sleep->surf_sleep)
-        sleep->surf_sleep->cancel();
+      if (sleep->surf_action_)
+        sleep->surf_action_->cancel();
       sleep->post();
     } else if (raw != nullptr) {
       SIMIX_synchro_stop_waiting(actor, &actor->simcall);
@@ -626,8 +637,8 @@ smx_activity_t SIMIX_process_join(smx_actor_t issuer, smx_actor_t process, doubl
   SIMIX_process_on_exit(process,
                         [](int, void* arg) {
                           auto sleep = static_cast<simgrid::kernel::activity::SleepImpl*>(arg);
-                          if (sleep->surf_sleep)
-                            sleep->surf_sleep->finish(simgrid::kernel::resource::Action::State::FINISHED);
+                          if (sleep->surf_action_)
+                            sleep->surf_action_->finish(simgrid::kernel::resource::Action::State::FINISHED);
                           intrusive_ptr_release(sleep);
                         },
                         res.get());
@@ -653,9 +664,9 @@ void SIMIX_process_sleep_destroy(smx_activity_t synchro)
   simgrid::kernel::activity::SleepImplPtr sleep =
       boost::dynamic_pointer_cast<simgrid::kernel::activity::SleepImpl>(synchro);
 
-  if (sleep->surf_sleep) {
-    sleep->surf_sleep->unref();
-    sleep->surf_sleep = nullptr;
+  if (sleep->surf_action_) {
+    sleep->surf_action_->unref();
+    sleep->surf_action_ = nullptr;
   }
 }