X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1d9d174e0e416ffd7be66189889a18bf3e21639b..8e7ef5ba20700f883e5f2976399a51ba898f676a:/src/s4u/s4u_Host.cpp?ds=sidebyside diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index 17f9d904ae..9aa141c5b6 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -100,12 +100,27 @@ void Host::turnOn() } } +/** @brief Stop the host if it is on */ void Host::turnOff() { if (isOn()) { smx_actor_t self = SIMIX_process_self(); simgrid::simix::simcall([this, self] { - SIMIX_host_off(this, self); + simgrid::simix::Host* host = this->extension(); + + xbt_assert((host != nullptr), "Invalid parameters"); + + this->pimpl_cpu->turn_off(); + + /* Clean Simulator data */ + if (not host->process_list.empty()) { + for (auto& process : host->process_list) { + SIMIX_process_kill(&process, self); + XBT_DEBUG("Killing %s@%s on behalf of %s which turned off that host.", process.get_cname(), + process.host->get_cname(), self->get_cname()); + } + } + on_state_change(*this); }); }