]> AND Public Git Repository - simgrid.git/blobdiff - src/s4u/s4u_Io.cpp
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Factor Activity::cancel() through CRTP.
[simgrid.git] / src / s4u / s4u_Io.cpp
index 8af99e815aa567c1344c6e30578aa316b9974bb3..548513b19e5e6cc8cb9c4634cb20194668b11aab 100644 (file)
@@ -20,6 +20,12 @@ Io::Io(kernel::activity::IoImplPtr pimpl)
   pimpl_ = pimpl;
 }
 
+void Io::complete(Activity::State state)
+{
+  Activity::complete(state);
+  on_completion(*this);
+}
+
 IoPtr Io::init()
 {
   auto pimpl = kernel::activity::IoImplPtr(new kernel::activity::IoImpl());
@@ -39,14 +45,6 @@ Io* Io::start()
   return this;
 }
 
-Io* Io::cancel()
-{
-  kernel::actor::simcall([this] { boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->cancel(); });
-  state_ = State::CANCELED;
-  on_completion(*this);
-  return this;
-}
-
 Io* Io::wait()
 {
   return this->wait_for(-1);
@@ -59,10 +57,7 @@ Io* Io::wait_for(double timeout)
 
   kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
   kernel::actor::simcall_blocking([this, issuer, timeout] { this->get_impl()->wait_for(issuer, timeout); });
-  state_ = State::FINISHED;
-  this->release_dependencies();
-
-  on_completion(*this);
+  complete(state_ = State::FINISHED);
   return this;
 }