X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/118a9b1b2609523e6fe263e753e79b6aad167723..425f2a49fa5770e2f008b0348245ea6b444118a4:/src/s4u/s4u_Host.cpp diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index 948353fb39..39fbe16c0d 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -312,9 +312,27 @@ std::vector Host::get_disks() const Disk* Host::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth) { - auto disk = - this->get_netpoint()->get_englobing_zone()->get_disk_model()->create_disk(name, read_bandwidth, write_bandwidth); - return disk->set_host(this)->get_iface(); + return kernel::actor::simcall([this, &name, read_bandwidth, write_bandwidth] { + return this->pimpl_->create_disk(name, read_bandwidth, write_bandwidth); + }); +} + +Disk* Host::create_disk(const std::string& name, const std::string& read_bandwidth, const std::string& write_bandwidth) +{ + double d_read, d_write; + try { + d_read = xbt_parse_get_bandwidth("", 0, read_bandwidth.c_str(), nullptr, ""); + } catch (const simgrid::ParseError&) { + throw std::invalid_argument(std::string("Impossible to create disk: ") + name + + std::string(". Invalid read bandwidth: ") + read_bandwidth); + } + try { + d_write = xbt_parse_get_bandwidth("", 0, write_bandwidth.c_str(), nullptr, ""); + } catch (const simgrid::ParseError&) { + throw std::invalid_argument(std::string("Impossible to create disk: ") + name + + std::string(". Invalid write bandwidth: ") + write_bandwidth); + } + return create_disk(name, d_read, d_write); } void Host::add_disk(const Disk* disk) @@ -347,9 +365,11 @@ void Host::execute(double flops, double priority) const this_actor::exec_init(flops)->set_priority(1 / priority)->vetoable_start()->wait(); } -void Host::seal() +Host* Host::seal() { kernel::actor::simcall([this]() { this->pimpl_->seal(); }); + simgrid::s4u::Host::on_creation(*this); // notify the signal + return this; } } // namespace s4u