#include <unordered_map>
+#include "simgrid/s4u/engine.hpp"
#include "simgrid/s4u/host.hpp"
#include "simgrid/s4u/storage.hpp"
#include "simgrid/simix.hpp"
{
xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name);
host_list[name_] = this;
+ new simgrid::surf::HostImpl(this);
}
Host::~Host()
xbt_assert(currentlyDestroying_, "Please call h->destroy() instead of manually deleting it.");
delete pimpl_;
+ if (pimpl_netcard != nullptr) // not removed yet by a children class
+ simgrid::s4u::Engine::instance()->netcardUnregister(pimpl_netcard);
delete pimpl_cpu;
- delete pimpl_netcard;
delete mounts;
}
simgrid::simix::kernelImmediate([&]{
this->extension<simgrid::simix::Host>()->turnOn();
this->pimpl_cpu->turnOn();
+ onStateChange(*this);
});
}
}
void Host::turnOff() {
if (isOn()) {
- simgrid::simix::kernelImmediate(std::bind(SIMIX_host_off, this, SIMIX_process_self()));
+ smx_actor_t self = SIMIX_process_self();
+ simgrid::simix::kernelImmediate([&] {
+ SIMIX_host_off(this, self);
+ onStateChange(*this);
+ });
}
}
* \brief Find a route toward another host
*
* \param dest [IN] where to
- * \param route [OUT] where to store the list of links (must exist, cannot be nullptr).
+ * \param links [OUT] where to store the list of links (must exist, cannot be nullptr).
* \param latency [OUT] where to store the latency experienced on the path (or nullptr if not interested)
* It is the caller responsibility to initialize latency to 0 (we add to provided route)
- * \pre route!=nullptr
+ * \pre links!=nullptr
*
* walk through the routing components tree and find a route between hosts
* by calling each "get_route" function in each routing component.