X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5ed37babb2fa9097abe82df299c0aa259ed84d5a..ebec9c6104a6bbe60b7bf4586baeaf0b88f53505:/src/s4u/s4u_Io.cpp diff --git a/src/s4u/s4u_Io.cpp b/src/s4u/s4u_Io.cpp index c88c7dc01a..e8aa898590 100644 --- a/src/s4u/s4u_Io.cpp +++ b/src/s4u/s4u_Io.cpp @@ -3,6 +3,7 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include #include #include #include @@ -14,7 +15,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_io, s4u_activity, "S4U asynchronous I/Os"); namespace simgrid::s4u { -xbt::signal Io::on_start; Io::Io(kernel::activity::IoImplPtr pimpl) { @@ -58,7 +58,7 @@ IoPtr Io::set_source(Host* from, const Disk* from_disk) if (state_ == State::STARTING && remains_ <= 0) XBT_DEBUG("This IO has a size of 0 byte. It cannot start yet"); else - vetoable_start(); + start(); return this; } @@ -76,12 +76,12 @@ IoPtr Io::set_destination(Host* to, const Disk* to_disk) if (state_ == State::STARTING && remains_ <= 0) XBT_DEBUG("This IO has a size of 0 byte. It cannot start yet"); else - vetoable_start(); + start(); return this; } -Io* Io::start() +Io* Io::do_start() { kernel::actor::simcall_answered( [this] { (*boost::static_pointer_cast(pimpl_)).set_name(get_name()).start(); }); @@ -90,16 +90,23 @@ Io* Io::start() pimpl_->suspend(); state_ = State::STARTED; - on_start(*this); + fire_on_start(); + fire_on_this_start(); return this; } -ssize_t Io::wait_any_for(const std::vector& ios, double timeout) +ssize_t Io::deprecated_wait_any_for(const std::vector& ios, double timeout) { - std::vector activities; + ActivitySet set; for (const auto& io : ios) - activities.push_back(boost::dynamic_pointer_cast(io)); - return Activity::wait_any_for(activities, timeout); + set.push(io); + + auto* ret = set.wait_any_for(timeout).get(); + for (size_t i = 0; i < ios.size(); i++) + if (ios[i].get() == ret) + return i; + + return -1; } IoPtr Io::set_disk(const_sg_disk_t disk) @@ -111,7 +118,7 @@ IoPtr Io::set_disk(const_sg_disk_t disk) // Setting the disk may allow to start the activity, let's try if (state_ == State::STARTING) - vetoable_start(); + start(); return this; }