+ simgrid::simix::kernelImmediate([vm]() {
+ if (static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->getState() != SURF_VM_STATE_SAVED)
+ THROWF(vm_error, 0, "VM(%s) was not saved", vm->name().c_str());
+
+ XBT_DEBUG("restore VM(%s), where %d processes exist", vm->name().c_str(),
+ xbt_swag_size(sg_host_simix(vm)->process_list));
+
+ /* jump to vm_ws_restore() */
+ static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->restore();
+
+ smx_actor_t smx_process, smx_process_safe;
+ xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(vm)->process_list)
+ {
+ XBT_DEBUG("resume %s", smx_process->name.c_str());
+ SIMIX_process_resume(smx_process);
+ }
+ });