X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2e7129924068cc550bffddb396bc236f66360735..f83095551d7472ec28dcdf6423cc07f161a9e967:/src/kernel/EngineImpl.cpp diff --git a/src/kernel/EngineImpl.cpp b/src/kernel/EngineImpl.cpp index 9a0f4ab2ff..58dccdbd1f 100644 --- a/src/kernel/EngineImpl.cpp +++ b/src/kernel/EngineImpl.cpp @@ -32,8 +32,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(ker_engine, "Logging specific to Engine (kernel)"); -namespace simgrid { -namespace kernel { +namespace simgrid::kernel { double EngineImpl::now_ = 0.0; EngineImpl* EngineImpl::instance_ = nullptr; /* That singleton is awful too. */ @@ -41,7 +40,7 @@ config::Flag cfg_breakpoint{"debug/breakpoint", "When non-negative, raise a SIGTRAP after given (simulated) time", -1.0}; config::Flag cfg_verbose_exit{"debug/verbose-exit", "Display the actor status at exit", true}; -constexpr std::initializer_list> context_factories = { +constexpr std::initializer_list> context_factories = { #if HAVE_RAW_CONTEXTS {"raw", &context::raw_factory}, #endif @@ -61,8 +60,8 @@ static inline std::string contexts_list() { std::string res; std::string sep = ""; - for (auto const& factory : context_factories) { - res += sep + factory.first; + for (auto const& [factory_name, _] : context_factories) { + res += sep + factory_name; sep = ", "; } return res; @@ -72,8 +71,7 @@ static config::Flag context_factory_name("contexts/factory", (std::string("Possible values: ") + contexts_list()).c_str(), context_factories.begin()->first); -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel XBT_ATTRIB_NORETURN static void inthandler(int) { @@ -160,27 +158,17 @@ static void install_segvhandler() #endif /* _WIN32 */ -namespace simgrid { -namespace kernel { +namespace simgrid::kernel { EngineImpl::~EngineImpl() { - /* Since hosts_ is a std::map, the hosts are destroyed in the lexicographic order, which ensures that the output is - * reproducible. - */ - while (not hosts_.empty()) - hosts_.begin()->second->destroy(); - /* Also delete the other data */ delete netzone_root_; - for (auto const& kv : netpoints_) - delete kv.second; + for (auto const& [_, netpoint] : netpoints_) + delete netpoint; - while (not links_.empty()) - links_.begin()->second->destroy(); - - for (auto const& kv : mailboxes_) - delete kv.second; + for (auto const& [_, mailbox] : mailboxes_) + delete mailbox; /* Kill all actors (but maestro) */ maestro_->kill_all(); @@ -255,14 +243,14 @@ void EngineImpl::context_mod_init() const #endif /* select the context factory to use to create the contexts */ - if (context::factory_initializer != nullptr) { // Give Java a chance to hijack the factory mechanism - instance_->set_context_factory(context::factory_initializer()); + if (context::ContextFactory::initializer) { // Give Java a chance to hijack the factory mechanism + instance_->set_context_factory(context::ContextFactory::initializer()); return; } /* use the factory specified by --cfg=contexts/factory:value */ - for (auto const& factory : context_factories) - if (context_factory_name == factory.first) { - instance_->set_context_factory(factory.second()); + for (auto const& [factory_name, factory] : context_factories) + if (context_factory_name == factory_name) { + instance_->set_context_factory(factory()); break; } @@ -296,7 +284,7 @@ void EngineImpl::shutdown() XBT_DEBUG("EngineImpl::shutdown() called. Simulation's over."); #if HAVE_SMPI if (not instance_->actor_list_.empty()) { - if (smpi_process()->initialized()) { + if (smpi_process() && smpi_process()->initialized()) { xbt_die("Process exited without calling MPI_Finalize - Killing simulation"); } else { XBT_WARN("Process called exit when leaving - Skipping cleanups"); @@ -332,9 +320,6 @@ void EngineImpl::seal_platform() const return; sealed = true; - /* 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(); } @@ -396,11 +381,6 @@ void EngineImpl::add_model(std::shared_ptr model, const std::ve models_prio_[model_name] = std::move(model); } -void EngineImpl::add_split_duplex_link(const std::string& name, std::unique_ptr link) -{ - split_duplex_links_[name] = std::move(link); -} - /** Wake up all actors waiting for a Surf action to finish */ void EngineImpl::handle_ended_actions() const { @@ -453,10 +433,7 @@ void EngineImpl::run_all_actors() actor::ActorImpl* EngineImpl::get_actor_by_pid(aid_t pid) { auto item = actor_list_.find(pid); - if (item != actor_list_.end()) - return item->second; - - return nullptr; // Not found + return item == actor_list_.end() ? nullptr : item->second; } void EngineImpl::remove_daemon(actor::ActorImpl* actor) @@ -496,9 +473,7 @@ void EngineImpl::display_all_actor_status() const XBT_INFO("%zu actors are still running, waiting for something.", actor_list_.size()); /* List the actors and their state */ XBT_INFO("Legend of the following listing: \"Actor (@): \""); - for (auto const& kv : actor_list_) { - const actor::ActorImpl* actor = kv.second; - + for (auto const& [_, actor] : actor_list_) { if (actor->waiting_synchro_) { const char* synchro_description = "unknown"; @@ -610,6 +585,8 @@ double EngineImpl::solve(double max_date) const XBT_DEBUG("Updating models (min = %g, NOW = %g, next_event_date = %g)", time_delta, now_, next_event_date); while (auto* event = profile::future_evt_set.pop_leq(next_event_date, &value, &resource)) { + if(value<0) + continue; if (resource->is_used() || (watched_hosts().find(resource->get_cname()) != watched_hosts().end())) { time_delta = next_event_date - now_; XBT_DEBUG("This event invalidates the next_occurring_event() computation of models. Next event set to %f", @@ -747,9 +724,9 @@ void EngineImpl::run(double max_date) } display_all_actor_status(); simgrid::s4u::Engine::on_deadlock(); - for (auto const& kv : actor_list_) { - XBT_DEBUG("Kill %s", kv.second->get_cname()); - maestro_->kill(kv.second); + for (auto const& [_, actor] : actor_list_) { + XBT_DEBUG("Kill %s", actor->get_cname()); + maestro_->kill(actor); } } } while ((vetoed_activities == nullptr || vetoed_activities->empty()) && @@ -765,5 +742,4 @@ double EngineImpl::get_clock() { return now_; } -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel