xbt_assert(exec.get() != nullptr, "We can only migrate blocked actors when they are blocked on executions.");
exec->migrate(new_host);
}
- SIMIX_process_change_host(this->pimpl_, new_host);
+ this->pimpl_->change_host(new_host);
});
s4u::Actor::on_migration_end(this);
waiting_synchro = nullptr;
}
+void ActorImpl::change_host(sg_host_t dest)
+{
+ simgrid::xbt::intrusive_erase(host_->pimpl_->process_list_, *this);
+ host_ = dest;
+ dest->pimpl_->process_list_.push_back(*this);
+}
+
ActorImplPtr ActorImpl::create(std::string name, simgrid::simix::ActorCode code, void* data, simgrid::s4u::Host* host,
std::unordered_map<std::string, std::string>* properties, smx_actor_t parent_actor)
{
SIMIX_process_kill(kv.second, issuer);
}
-void SIMIX_process_change_host(smx_actor_t actor, sg_host_t dest)
-{
- xbt_assert((actor != nullptr), "Invalid parameters");
- simgrid::xbt::intrusive_erase(actor->host_->pimpl_->process_list_, *actor);
- actor->host_ = dest;
- dest->pimpl_->process_list_.push_back(*actor);
-}
void simcall_HANDLER_process_suspend(smx_simcall_t simcall, smx_actor_t actor)
{
void* get_user_data() { return userdata_; }
/** Ask the actor to throw an exception right away */
void throw_exception(std::exception_ptr e);
+ void change_host(sg_host_t dest);
};
class ProcessArg {
XBT_PRIVATE void SIMIX_process_cleanup(smx_actor_t arg);
XBT_PRIVATE void SIMIX_process_empty_trash();
XBT_PRIVATE void SIMIX_process_yield(smx_actor_t self);
-XBT_PRIVATE void SIMIX_process_change_host(smx_actor_t process, sg_host_t dest);
extern void (*SMPI_switch_data_segment)(simgrid::s4u::ActorPtr actor);