+ simgrid::simix::kernelImmediate([this, new_host]() {
+ if (pimpl_->waiting_synchro != nullptr) {
+ // The actor is blocked on an activity. If it's an exec, migrate it too.
+ // FIXME: implement the migration of other kind of activities
+ simgrid::kernel::activity::ExecImplPtr exec =
+ boost::dynamic_pointer_cast<simgrid::kernel::activity::ExecImpl>(pimpl_->waiting_synchro);
+ 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);
+ });