X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cfa35c4fa9a6bcfa6aa8f8cf21da6ab292ea21ad..f0534a5e2af72c36c12d55f7ea323040e6e9bf36:/src/kernel/EngineImpl.cpp diff --git a/src/kernel/EngineImpl.cpp b/src/kernel/EngineImpl.cpp index 2404648864..f4a3d747db 100644 --- a/src/kernel/EngineImpl.cpp +++ b/src/kernel/EngineImpl.cpp @@ -194,9 +194,6 @@ void EngineImpl::initialize(int* argc, char** argv) install_signal_handlers(); - /* register a function to be called after the environment creation */ - s4u::Engine::on_platform_created_cb([this]() { this->presolve(); }); - if (cfg_dbg_clean_atexit) atexit(shutdown); } @@ -324,7 +321,7 @@ void EngineImpl::load_deployment(const std::string& file) const sg_platf_parser_finalize(); simgrid_parse_open(file); - simgrid_parse(); + simgrid_parse(false); simgrid_parse_close(); } @@ -359,24 +356,27 @@ void EngineImpl::handle_ended_actions() const while (auto* action = model->extract_failed_action()) { XBT_DEBUG(" Handling Action %p", action); if (action->get_activity() != nullptr) { // Skip vcpu actions + activity::ActivityImplPtr activity(action->get_activity()); // Action failures are not automatically reported when the action is started by maestro (as in SimDAG) - if (action->get_activity()->get_actor() == maestro_) - action->get_activity()->get_iface()->complete(s4u::Activity::State::FAILED); + if (activity->get_actor() == maestro_) + activity->get_iface()->complete(s4u::Activity::State::FAILED); - activity::ActivityImplPtr(action->get_activity())->finish(); + activity->finish(); } } XBT_DEBUG("Handling the terminated actions (if any)"); while (auto* action = model->extract_done_action()) { XBT_DEBUG(" Handling Action %p", action); if (action->get_activity() != nullptr) { + activity::ActivityImplPtr activity(action->get_activity()); + // Action termination are not automatically reported when the action is started by maestro (as in SimDAG) - action->get_activity()->set_finish_time(action->get_finish_time()); + 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); + if (activity->get_actor() == maestro_) + activity->get_iface()->complete(s4u::Activity::State::FINISHED); - activity::ActivityImplPtr(action->get_activity())->finish(); + activity->finish(); } } } @@ -477,27 +477,6 @@ void EngineImpl::display_all_actor_status() const } } -void EngineImpl::presolve() const -{ - XBT_DEBUG("Consume all trace events occurring before the starting time."); - double next_event_date; - while ((next_event_date = profile::future_evt_set.next_date()) != -1.0) { - if (next_event_date > now_) - break; - - double value = -1.0; - resource::Resource* resource = nullptr; - while (auto* event = profile::future_evt_set.pop_leq(next_event_date, &value, &resource)) { - if (value >= 0) - resource->apply_event(event, value); - } - } - - XBT_DEBUG("Set every models in the right state by updating them to 0."); - for (auto const& model : models_) - model->update_actions_state(now_, 0.0); -} - double EngineImpl::solve(double max_date) const { double time_delta = -1.0; /* duration */ @@ -512,9 +491,9 @@ double EngineImpl::solve(double max_date) const XBT_DEBUG("Looking for next event in all models"); for (auto model : models_) { - if (not model->next_occurring_event_is_idempotent()) { + if (not model->next_occurring_event_is_idempotent()) continue; - } + double next_event = model->next_occurring_event(now_); if ((time_delta < 0.0 || next_event < time_delta) && next_event >= 0.0) { time_delta = next_event;