+ auto pimpl = kernel::activity::ExecImplPtr(new kernel::activity::ExecImpl());
+ unsigned int cb_id = Host::on_state_change.connect([pimpl](s4u::Host const& h) {
+ if (not h.is_on() && pimpl->state_ == kernel::activity::State::RUNNING &&
+ std::find(pimpl->get_hosts().begin(), pimpl->get_hosts().end(), &h) != pimpl->get_hosts().end()) {
+ pimpl->state_ = kernel::activity::State::FAILED;
+ pimpl->post();
+ }
+ });
+ pimpl->set_cb_id(cb_id);
+ return ExecPtr(pimpl->get_iface());
+}
+
+Exec* Exec::start()
+{
+ kernel::actor::simcall([this] {
+ (*boost::static_pointer_cast<kernel::activity::ExecImpl>(pimpl_))
+ .set_name(get_name())
+ .set_tracing_category(get_tracing_category())
+ .start();
+ });