#include "src/surf/surf_interface.hpp"
#ifdef HAVE_SMPI
-#include "src/smpi/private.h"
+#include "src/smpi/include/private.hpp"
#endif
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_process, simix, "Logging specific to SIMIX (process)");
}
}
-ActorImpl* ActorImpl::restart(ActorImpl* issuer)
+simgrid::s4u::Actor* ActorImpl::restart()
{
XBT_DEBUG("Restarting process %s on %s", cname(), host->getCname());
arg.code = code;
arg.host = host;
arg.kill_time = SIMIX_timer_get_date(kill_timer);
- arg.data = data;
+ arg.data = userdata;
arg.properties = nullptr;
arg.auto_restart = auto_restart;
// kill the old process
- SIMIX_process_kill(this, issuer);
+ SIMIX_process_kill(this, this);
// start the new process
ActorImpl* actor = simix_global->create_process_function(arg.name.c_str(), std::move(arg.code), arg.data, arg.host,
if (arg.kill_time >= 0)
simcall_process_set_kill_time(actor, arg.kill_time);
if (arg.auto_restart)
- simcall_process_auto_restart_set(actor, arg.auto_restart);
+ actor->auto_restart = arg.auto_restart;
- return actor;
+ return actor->ciface();
}
smx_activity_t ActorImpl::suspend(ActorImpl* issuer)
maestro = new simgrid::simix::ActorImpl();
maestro->pid = simix_process_maxpid++;
maestro->name = "";
- maestro->data = nullptr;
+ maestro->userdata = nullptr;
if (not code) {
maestro->context = SIMIX_context_new(std::function<void()>(), nullptr, maestro);
process->pid = simix_process_maxpid++;
process->name = simgrid::xbt::string(name);
process->host = host;
- process->data = data;
+ process->userdata = data;
process->simcall.issuer = process;
if (parent_process != nullptr) {
process->pid = simix_process_maxpid++;
process->name = std::string(name);
process->host = host;
- process->data = data;
+ process->userdata = data;
process->simcall.issuer = process;
if (parent_process != nullptr) {
if (not self) {
return nullptr;
}
- return self->data;
+ return self->getUserData();
}
void SIMIX_process_self_set_data(void *data)
{
- smx_actor_t self = SIMIX_process_self();
-
- SIMIX_process_set_data(self, data);
+ SIMIX_process_self()->setUserData(data);
}
-void SIMIX_process_set_data(smx_actor_t process, void *data)
-{
- process->data = data;
-}
/* needs to be public and without simcall because it is called
by exceptions and logging events */
/**
* \brief Calling this function makes the process to yield.
*
- * Only the current process can call this function, giving back the control to
- * maestro.
+ * Only the current process can call this function, giving back the control to maestro.
*
* \param self the current process
*/
SIMIX_process_on_exit_runall(self);
/* Add the process to the list of process to restart, only if the host is down */
if (self->auto_restart && self->host->isOff()) {
- SIMIX_host_add_auto_restart_process(self->host, self->cname(),
- self->code, self->data,
- SIMIX_timer_get_date(self->kill_timer),
- self->properties,
- self->auto_restart);
+ SIMIX_host_add_auto_restart_process(self->host, self->cname(), self->code, self->userdata,
+ SIMIX_timer_get_date(self->kill_timer), self->properties, self->auto_restart);
}
XBT_DEBUG("Process %s@%s is dead", self->cname(), self->host->getCname());
self->context->stop();
xbt_abort();
}
-/**
- * \brief Returns the list of processes to run.
- */
+/** @brief Returns the list of processes to run. */
xbt_dynar_t SIMIX_process_get_runnable()
{
return simix_global->process_to_run;
}
-/**
- * \brief Returns the process from PID.
- */
+/** @brief Returns the process from PID. */
smx_actor_t SIMIX_process_from_PID(aid_t PID)
{
if (simix_global->process_list.find(PID) == simix_global->process_list.end())
/**
* \brief Sets the auto-restart status of the process.
- * If set to 1, the process will be automatically restarted when its host
- * comes back.
+ * If set to 1, the process will be automatically restarted when its host comes back.
*/
void SIMIX_process_auto_restart_set(smx_actor_t process, int auto_restart) {
process->auto_restart = auto_restart;
}
-smx_actor_t simcall_HANDLER_process_restart(smx_simcall_t simcall, smx_actor_t process) {
- return process->restart(simcall->issuer);
-}
-
/** @brief Restart a process, starting it again from the beginning. */
/**
* \ingroup simix_process_management