}
namespace simgrid {
+
+namespace s4u {
+simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> s4u::Actor::onCreation; // TODO cheinrich is this the right location here?
+}
namespace simix {
ActorImpl::~ActorImpl()
return nullptr;
} else {
- return SIMIX_execution_start(this, "suspend", 0.0, 1.0, 0.0);
+ return SIMIX_execution_start("suspend", 0.0, 1.0, 0.0, this->host);
}
}
}
smx_actor_t process = new simgrid::simix::ActorImpl();
+ simgrid::s4u::ActorPtr tmp = process->iface(); // Passing this directly to onCreation will lead to crashes
+ simgrid::s4u::Actor::onCreation(tmp);
xbt_assert(code && host != nullptr, "Invalid parameters");
/* Process data */
boost::dynamic_pointer_cast<simgrid::kernel::activity::IoImpl>(process->waiting_synchro);
if (exec != nullptr) {
- /* Nothing to do */
+ if (exec->surfAction_) {
+ exec->surfAction_->cancel();
+ exec->surfAction_->unref();
+ exec->surfAction_ = nullptr;
+ }
} else if (comm != nullptr) {
process->comms.remove(process->waiting_synchro);
comm->cancel();
simgrid::kernel::activity::ExecImplPtr exec =
boost::dynamic_pointer_cast<simgrid::kernel::activity::ExecImpl>(process->waiting_synchro);
- if (exec != nullptr && exec->surf_exec)
- exec->surf_exec->cancel();
+ if (exec != nullptr && exec->surfAction_)
+ exec->surfAction_->cancel();
simgrid::kernel::activity::CommImplPtr comm =
boost::dynamic_pointer_cast<simgrid::kernel::activity::CommImpl>(process->waiting_synchro);
simix_process_maxpid = reset_pid;
}
-void SIMIX_process_change_host(smx_actor_t process, sg_host_t dest)
+void SIMIX_process_change_host(smx_actor_t actor, sg_host_t dest)
{
- xbt_assert((process != nullptr), "Invalid parameters");
- simgrid::xbt::intrusive_erase(process->host->extension<simgrid::simix::Host>()->process_list, *process);
- process->host = dest;
- dest->extension<simgrid::simix::Host>()->process_list.push_back(*process);
+ xbt_assert((actor != nullptr), "Invalid parameters");
+ simgrid::xbt::intrusive_erase(actor->host->extension<simgrid::simix::Host>()->process_list, *actor);
+ actor->host = dest;
+ dest->extension<simgrid::simix::Host>()->process_list.push_back(*actor);
}
void simcall_HANDLER_process_suspend(smx_simcall_t simcall, smx_actor_t process)
/* Ok, maestro returned control to us */
XBT_DEBUG("Control returned to me: '%s'", self->name.c_str());
- if (self->new_host) {
- SIMIX_process_change_host(self, self->new_host);
- self->new_host = nullptr;
- }
-
if (self->context->iwannadie){
XBT_DEBUG("I wanna die!");
self->finished = true;