X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/696a185839cb7e7b4974f9dfd05d6e1ed3101815..922974894c47ede2b825a0dfff298a5d21898ac4:/src/simix/smx_vm.c diff --git a/src/simix/smx_vm.c b/src/simix/smx_vm.c index 7429d96d40..2191b50cb3 100644 --- a/src/simix/smx_vm.c +++ b/src/simix/smx_vm.c @@ -81,6 +81,32 @@ int SIMIX_pre_vm_state(smx_host_t vm){ return SIMIX_get_vm_state(vm); } +/** + * \brief Function to suspend a SIMIX VM host. This function powers off the + * VM. All the processes on this VM will be killed. But, the state of the VM is + * perserved. We can later start it again. + * + * \param host the vm host to suspend (a smx_host_t) + */ +void SIMIX_vm_suspend(smx_host_t host) +{ + /* TODO: check state */ + + XBT_DEBUG("%lu processes in the VM", xbt_swag_size(SIMIX_host_priv(host)->process_list)); + + smx_process_t smx_process, smx_process_safe; + xbt_swag_foreach_safe(smx_process, smx_process_safe, SIMIX_host_priv(host)->process_list) { + XBT_DEBUG("suspend %s", SIMIX_host_get_name(host)); + simcall_process_suspend(smx_process); + } + + /* TODO: Using the variable of the MSG layer is not clean. */ + SIMIX_set_vm_state(host, msg_vm_state_suspended); +} + +void SIMIX_pre_vm_suspend(smx_simcall_t simcall, smx_host_t vm){ + SIMIX_vm_suspend(vm); +} /** * \brief Function to shutdown a SIMIX VM host. This function powers off the @@ -93,15 +119,16 @@ void SIMIX_vm_shutdown(smx_host_t host) { /* TODO: check state */ - XBT_DEBUG("%lu processes in the VM", xbt_swag_size(SIMIX_host_priv(smx_host)->process_list)); + XBT_DEBUG("%lu processes in the VM", xbt_swag_size(SIMIX_host_priv(host)->process_list)); - xbt_swag_foreach_safe(smx_process, SIMIX_host_priv(smx_host)->process_list) { - XBT_DEBUG("kill %s", SIMIX_host_get_name(smx_host)); + smx_process_t smx_process, smx_process_safe; + xbt_swag_foreach_safe(smx_process, smx_process_safe, SIMIX_host_priv(host)->process_list) { + XBT_DEBUG("kill %s", SIMIX_host_get_name(host)); simcall_process_kill(smx_process); } /* TODO: Using the variable of the MSG layer is not clean. */ - SIMIX_set_vm_state(vm, msg_vm_state_sleeping); + SIMIX_set_vm_state(host, msg_vm_state_sleeping); } void SIMIX_pre_vm_shutdown(smx_simcall_t simcall, smx_host_t vm){