- simgrid::kernel::actor::simcall([this] { boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->cancel(); });
- state_ = State::CANCELED;
+ xbt_assert(state_ == State::INITED || state_ == State::STARTING,
+ "Cannot change the source of an IO stream once it's started (state: %s)", to_c_str(state_));
+ kernel::actor::simcall_object_access(pimpl_.get(), [this, to, to_disk] {
+ boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->set_dst_host(to);
+ if (to_disk != nullptr)
+ boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->set_dst_disk(to_disk->get_impl());
+ });
+ // Setting 'destination' may allow to start the activity, let's try
+ if (state_ == State::STARTING && remains_ <= 0)
+ XBT_DEBUG("This IO has a size of 0 byte. It cannot start yet");
+ else
+ start();
+