X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bc72352bb779924c8f89e9835b9a409ab48adcf3..35844b5c0f5a9e9437b966611f1e624a1c724b2b:/src/plugins/vm/VirtualMachineImpl.cpp diff --git a/src/plugins/vm/VirtualMachineImpl.cpp b/src/plugins/vm/VirtualMachineImpl.cpp index a34c8a3e00..66e0ce6440 100644 --- a/src/plugins/vm/VirtualMachineImpl.cpp +++ b/src/plugins/vm/VirtualMachineImpl.cpp @@ -6,6 +6,8 @@ #include "src/plugins/vm/VirtualMachineImpl.hpp" #include "simgrid/s4u/VirtualMachine.hpp" +#include "src/simix/ActorImpl.hpp" +#include "src/simix/smx_host_private.h" #include @@ -173,9 +175,21 @@ void VirtualMachineImpl::save() void VirtualMachineImpl::restore() { + if (getState() != SURF_VM_STATE_SAVED) + THROWF(vm_error, 0, "Cannot restore VM %s: it was not saved", piface_->cname()); + + xbt_swag_t process_list = piface_->extension()->process_list; + XBT_DEBUG("Restore VM %s, where %d processes exist", piface_->cname(), xbt_swag_size(process_list)); + vmState_ = SURF_VM_STATE_RESTORING; action_->resume(); vmState_ = SURF_VM_STATE_RUNNING; + + smx_actor_t smx_process, smx_process_safe; + xbt_swag_foreach_safe(smx_process, smx_process_safe, process_list) { + XBT_DEBUG("resume %s", smx_process->cname()); + SIMIX_process_resume(smx_process); + } } /** @brief returns the physical machine on which the VM is running **/