+ if (get_state() != s4u::VirtualMachine::state::RUNNING) {
+ const char* stateName = "(unknown state)";
+ switch (get_state()) {
+ case s4u::VirtualMachine::state::CREATED:
+ stateName = "created, but not yet started";
+ break;
+ case s4u::VirtualMachine::state::SUSPENDED:
+ stateName = "suspended";
+ break;
+ case s4u::VirtualMachine::state::DESTROYED:
+ stateName = "destroyed";
+ break;
+ default: /* SURF_VM_STATE_RUNNING or unexpected values */
+ THROW_IMPOSSIBLE;
+ break;
+ }
+ XBT_VERB("Shutting down the VM %s even if it's not running but %s", piface_->get_cname(), stateName);
+ }
+
+ XBT_DEBUG("shutdown VM %s, that contains %zu processes", piface_->get_cname(), process_list.size());
+
+ for (auto& smx_process : process_list) {
+ XBT_DEBUG("kill %s@%s on behalf of %s which shutdown that VM.", smx_process.get_cname(),
+ smx_process.host_->get_cname(), issuer->get_cname());
+ SIMIX_process_kill(&smx_process, issuer);
+ }
+
+ set_state(s4u::VirtualMachine::state::DESTROYED);
+
+ /* FIXME: we may have to do something at the surf layer, e.g., vcpu action */