/* 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 "simgrid/s4u/Actor.hpp"
#include "simgrid/s4u/Disk.hpp"
#include "simgrid/s4u/Io.hpp"
#include "simgrid/s4u/Storage.hpp"
namespace simgrid {
namespace s4u {
+xbt::signal<void(Io const&)> Io::on_start;
+xbt::signal<void(Io const&)> Io::on_completion;
Io::Io(sg_disk_t disk, sg_size_t size, OpType type) : disk_(disk), size_(size), type_(type)
{
.start();
}
});
+
+ if (suspended_)
+ pimpl_->suspend();
+
state_ = State::STARTED;
+ on_start(*this);
return this;
}
{
if (state_ == State::INITED)
vetoable_start();
- simcall_io_wait(get_impl(), timeout);
+
+ kernel::actor::ActorImpl* issuer = Actor::self()->get_impl();
+ kernel::actor::simcall_blocking<void>([this, issuer, timeout] { this->get_impl()->wait_for(issuer, timeout); });
state_ = State::FINISHED;
this->release_dependencies();
- return this;
-}
-bool Io::test()
-{
- xbt_assert(state_ == State::INITED || state_ == State::STARTED || state_ == State::STARTING ||
- state_ == State::FINISHED);
-
- if (state_ == State::FINISHED)
- return true;
-
- if (state_ == State::INITED || state_ == State::STARTING)
- this->vetoable_start();
-
- if (simcall_io_test(get_impl())) {
- state_ = State::FINISHED;
- this->release_dependencies();
- return true;
- }
-
- return false;
+ on_completion(*this);
+ return this;
}
/** @brief Returns the amount of flops that remain to be done */