Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'simcall_blocking' into 'master'
[simgrid.git] / src / s4u / s4u_Io.cpp
index 524f300..aec4f16 100644 (file)
@@ -6,8 +6,8 @@
 #include "simgrid/s4u/Actor.hpp"
 #include "simgrid/s4u/Disk.hpp"
 #include "simgrid/s4u/Io.hpp"
-#include "simgrid/s4u/Storage.hpp"
 #include "src/kernel/activity/IoImpl.hpp"
+#include "src/kernel/actor/ActorImpl.hpp"
 #include "xbt/log.h"
 
 namespace simgrid {
@@ -28,21 +28,12 @@ IoPtr Io::init()
 Io* Io::start()
 {
   kernel::actor::simcall([this] {
-    if (storage_) {
-      (*boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_))
-          .set_name(get_name())
-          .set_storage(storage_->get_impl())
-          .set_size(size_)
-          .set_type(type_)
-          .start();
-    } else {
-      (*boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_))
-          .set_name(get_name())
-          .set_disk(disk_->get_impl())
-          .set_size(size_)
-          .set_type(type_)
-          .start();
-    }
+    (*boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_))
+                  .set_name(get_name())
+                  .set_disk(disk_->get_impl())
+                  .set_size(size_)
+                  .set_type(type_)
+                  .start();
   });
 
   if (suspended_)
@@ -57,6 +48,7 @@ Io* Io::cancel()
 {
   simgrid::kernel::actor::simcall([this] { boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->cancel(); });
   state_ = State::CANCELED;
+  on_completion(*this);
   return this;
 }
 
@@ -70,8 +62,8 @@ Io* Io::wait_for(double timeout)
   if (state_ == State::INITED)
     vetoable_start();
 
-  kernel::actor::ActorImpl* issuer = Actor::self()->get_impl();
-  kernel::actor::simcall_blocking<void>([this, issuer, timeout] { this->get_impl()->wait_for(issuer, 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();
 
@@ -82,13 +74,12 @@ Io* Io::wait_for(double timeout)
 IoPtr Io::set_disk(sg_disk_t disk)
 {
   disk_ = disk;
-  return this;
-}
 
-IoPtr Io::set_storage(sg_storage_t storage)
-{
-  storage_ = storage;
-  return this;
+  // Setting the disk may allow to start the activity, let's try
+  if (state_ == State::STARTING)
+    vetoable_start();
+
+ return this;
 }
 
 IoPtr Io::set_size(sg_size_t size)