Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Modernize simcall_io_test().
[simgrid.git] / src / s4u / s4u_Io.cpp
index 9b363ce..ddfaa61 100644 (file)
@@ -61,23 +61,28 @@ Io* Io::wait()
 
 Io* Io::wait_for(double timeout)
 {
-  simcall_io_wait(pimpl_, timeout);
+  if (state_ == State::INITED)
+    vetoable_start();
+  simcall_io_wait(get_impl(), timeout);
   state_ = State::FINISHED;
+  this->release_dependencies();
   return this;
 }
 
 bool Io::test()
 {
-  xbt_assert(state_ == State::INITED || state_ == State::STARTED || state_ == State::FINISHED);
+  xbt_assert(state_ == State::INITED || state_ == State::STARTED || state_ == State::STARTING ||
+             state_ == State::FINISHED);
 
   if (state_ == State::FINISHED)
     return true;
 
-  if (state_ == State::INITED)
-    this->start();
+  if (state_ == State::INITED || state_ == State::STARTING)
+    this->vetoable_start();
 
-  if (simcall_io_test(pimpl_)) {
+  if (kernel::actor::simcall([this] { return this->get_impl()->test(); })) {
     state_ = State::FINISHED;
+    this->release_dependencies();
     return true;
   }
 
@@ -85,16 +90,15 @@ bool Io::test()
 }
 
 /** @brief Returns the amount of flops that remain to be done */
-double Io::get_remaining()
+double Io::get_remaining() const
 {
   return kernel::actor::simcall(
       [this]() { return boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->get_remaining(); });
 }
 
-sg_size_t Io::get_performed_ioops()
+sg_size_t Io::get_performed_ioops() const
 {
-  return kernel::actor::simcall(
-      [this]() { return boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->get_performed_ioops(); });
+  return boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->get_performed_ioops();
 }
 
 } // namespace s4u