class XBT_PUBLIC Io : public Activity_T<Io> {
#ifndef DOXYGEN
friend kernel::activity::IoImpl;
+ friend kernel::EngineImpl;
#endif
protected:
if (exec != nullptr && exec->get_actor() == maestro_)
exec->get_iface()->complete(s4u::Activity::State::FAILED);
+ auto* io = dynamic_cast<activity::IoImpl*>(action->get_activity());
+ if (io != nullptr && io->get_actor() == maestro_)
+ io->get_iface()->complete(s4u::Activity::State::FAILED);
+
activity::ActivityImplPtr(action->get_activity())->post();
}
}
exec->set_finish_time(action->get_finish_time());
exec->get_iface()->complete(s4u::Activity::State::FINISHED);
}
+ auto* io = dynamic_cast<activity::IoImpl*>(action->get_activity());
+ if (io != nullptr && io->get_actor() == maestro_)
+ io->get_iface()->complete(s4u::Activity::State::FINISHED);
+
activity::ActivityImplPtr(action->get_activity())->post();
}
}
IoImpl::IoImpl()
{
piface_ = new s4u::Io(this);
+ actor::ActorImpl* self = actor::ActorImpl::self();
+ if (self) {
+ actor_ = self;
+ self->activities_.emplace_back(this);
+ }
}
IoImpl& IoImpl::set_sharing_penalty(double sharing_penalty)
namespace activity {
class XBT_PUBLIC IoImpl : public ActivityImpl_T<IoImpl> {
+ actor::ActorImpl* actor_ = nullptr;
resource::DiskImpl* disk_ = nullptr;
double sharing_penalty_ = 1.0;
sg_size_t size_ = 0;
sg_size_t performed_ioops_ = 0;
resource::Action* timeout_detector_ = nullptr;
s4u::Io* piface_;
-
public:
IoImpl();
s4u::Io* get_iface() { return piface_; }
+ actor::ActorImpl* get_actor() { return actor_; }
IoImpl& set_sharing_penalty(double sharing_penalty);
IoImpl& set_timeout(double timeout) override;