/* Process handling */
XBT_PUBLIC void simcall_process_suspend(smx_actor_t process);
-
-/* Getters and Setters */
-XBT_PUBLIC void simcall_process_set_kill_time(smx_actor_t process, double kill_time);
XBT_PUBLIC void simcall_process_join(smx_actor_t process, double timeout);
+
/* Sleep control */
XBT_PUBLIC e_smx_state_t simcall_process_sleep(double duration);
SG_END_DECL()
return simgrid::simix::simcall([this] { return pimpl_->suspended_; });
}
-void Actor::set_kill_time(double time)
+void Actor::set_kill_time(double kill_time)
{
- simcall_process_set_kill_time(pimpl_, time);
+ simgrid::simix::simcall([this, kill_time] { pimpl_->set_kill_time(kill_time); });
}
/** @brief Get the kill time of an actor(or 0 if unset). */
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;
// 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();
~ActorImpl();
void set_auto_restart(bool autorestart) { auto_restart_ = autorestart; }
-
+ void set_kill_time(double kill_time);
boost::intrusive::list_member_hook<> host_process_list_hook; /* simgrid::simix::Host::process_list */
boost::intrusive::list_member_hook<> smx_destroy_list_hook; /* simix_global->process_to_destroy */
boost::intrusive::list_member_hook<> smx_synchro_hook; /* {mutex,cond,sem}->sleeping */
simcall_BODY_process_suspend(process);
}
-/**
- * @ingroup simix_process_management
- * @brief Set the kill time of a process.
- */
-void simcall_process_set_kill_time(smx_actor_t process, double kill_time)
-{
-
- if (kill_time <= SIMIX_get_clock())
- return;
- XBT_DEBUG("Set kill time %f for process %s@%s", kill_time, process->get_cname(), process->host_->get_cname());
- process->kill_timer = SIMIX_timer_set(kill_time, [process] {
- SIMIX_process_kill(process, nullptr);
- process->kill_timer=nullptr;
- });
-}
-
/**
* @ingroup simix_process_management
* @brief Creates a new sleep SIMIX synchro.
smx_actor_t actor =
SIMIX_process_create(arg->name.c_str(), arg->code, nullptr, arg->host, arg->properties.get(), nullptr);
if (arg->kill_time >= 0)
- simcall_process_set_kill_time(actor, arg->kill_time);
+ actor->set_kill_time(arg->kill_time);
if (arg->auto_restart)
actor->auto_restart_ = arg->auto_restart;
if (arg->daemon_)
smx_actor_t actor = SIMIX_process_create(arg->name.c_str(), std::move(arg->code), arg->data, arg->host,
arg->properties.get(), nullptr);
if (arg->kill_time >= 0)
- simcall_process_set_kill_time(actor, arg->kill_time);
+ actor->set_kill_time(arg->kill_time);
if (auto_restart)
actor->set_auto_restart(auto_restart);
delete arg;
/* The actor creation will fail if the host is currently dead, but that's fine */
if (actor != nullptr) {
if (arg->kill_time >= 0)
- simcall_process_set_kill_time(actor, arg->kill_time);
+ actor->set_kill_time(arg->kill_time);
if (auto_restart)
actor->set_auto_restart(auto_restart);
}