/** Signal to others that a new actor has been created **/
static simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> onCreation;
- /** Signal indicating that the given actor is about to disappear */
- static simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> onDestruction;
/** Create an actor using a function
*
namespace s4u {
simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> s4u::Actor::onCreation;
-simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> s4u::Actor::onDestruction;
// ***** Actor creation *****
ActorPtr Actor::self()
simix_global->process_list[process->pid] = process;
XBT_DEBUG("Inserting %s(%s) in the to_run list", process->getCname(), host->getCname());
simix_global->process_to_run.push_back(process);
- intrusive_ptr_add_ref(process);
/* Tracing the process creation */
TRACE_msg_process_create(process->getName(), process->pid, process->host);
auto process = context->process();
simix_global->cleanup_process_function(process);
context->attach_stop();
+ delete process;
}
/**
}
void SIMIX_process_on_exit_runall(smx_actor_t process) {
- simgrid::s4u::Actor::onDestruction(process->iface());
smx_process_exit_status_t exit_status = (process->context->iwannadie) ? SMX_EXIT_FAILURE : SMX_EXIT_SUCCESS;
while (not process->on_exit.empty()) {
s_smx_process_exit_fun_t exit_fun = process->on_exit.back();
simgrid::s4u::Actor::onCreation.connect([](simgrid::s4u::ActorPtr actor) {
process_data.insert({actor, new simgrid::smpi::Process(actor, nullptr)});
});
- simgrid::s4u::Actor::onDestruction.connect([](simgrid::s4u::ActorPtr actor) {
- if (process_data.find(actor) != process_data.end()) {
- delete process_data.at(actor);
- process_data.erase(actor);
- }
- });
-
smpi_init_options();
smpi_global_init();
smpi_check_options();