/* register a function to be called by SURF after the environment creation */
sg_platf_init();
- s4u::Engine::on_platform_created.connect([this]() { this->presolve(); });
+ s4u::Engine::on_platform_created_cb([this]() { this->presolve(); });
if (config::get_value<bool>("debug/clean-atexit"))
atexit(shutdown);
instance_->empty_trash();
/* Let's free maestro now */
- instance_->destroy_maestro();
+ delete instance_->maestro_;
+ instance_->maestro_ = nullptr;
/* Finish context module and SURF */
instance_->destroy_context_factory();
instance_ = nullptr;
}
+void EngineImpl::seal_platform() const
+{
+ /* sealing resources before run: links */
+ for (auto const& kv : links_)
+ kv.second->get_iface()->seal();
+ /* seal netzone root, recursively seal children netzones, hosts and disks */
+ netzone_root_->seal();
+}
+
void EngineImpl::load_platform(const std::string& platf)
{
double start = xbt_os_time();
if (action->get_activity() != nullptr) {
// If nobody told the interface that the activity has failed, that's because no actor waits on it (maestro
// started it). SimDAG I see you!
- auto* exec = dynamic_cast<activity::ExecImpl*>(action->get_activity());
- if (exec != nullptr && exec->get_actor() == maestro_)
- exec->get_iface()->complete(s4u::Activity::State::FAILED);
+ if (action->get_activity()->get_actor() == maestro_)
+ action->get_activity()->get_iface()->complete(s4u::Activity::State::FAILED);
activity::ActivityImplPtr(action->get_activity())->post();
}
else {
// If nobody told the interface that the activity is finished, that's because no actor waits on it (maestro
// started it). SimDAG I see you!
- // TODO: do the same for other activity kinds once comms are cleaned up
- auto* exec = dynamic_cast<activity::ExecImpl*>(action->get_activity());
- if (exec != nullptr && exec->get_actor() == maestro_)
- exec->get_iface()->complete(s4u::Activity::State::FINISHED);
+ action->get_activity()->set_finish_time(action->get_finish_time());
+
+ if (action->get_activity()->get_actor() == maestro_)
+ action->get_activity()->get_iface()->complete(s4u::Activity::State::FINISHED);
activity::ActivityImplPtr(action->get_activity())->post();
}
void EngineImpl::run(double max_date)
{
+ seal_platform();
+
if (MC_record_replay_is_active()) {
mc::replay(MC_record_path());
empty_trash();
}
double elapsed_time = -1;
- std::set<s4u::Activity*>* vetoed_activities = s4u::Activity::get_vetoed_activities();
+ const std::set<s4u::Activity*>* vetoed_activities = s4u::Activity::get_vetoed_activities();
do {
XBT_DEBUG("New Schedule Round; size(queue)=%zu", actors_to_run_.size());