X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c76dff0228ca1145b553ffc73f0293ac8f8a75d1..2ad536e710c5936ff8e525e4bbb5e7046f292aac:/src/kernel/EngineImpl.cpp diff --git a/src/kernel/EngineImpl.cpp b/src/kernel/EngineImpl.cpp index c27e814ea9..025228ae6e 100644 --- a/src/kernel/EngineImpl.cpp +++ b/src/kernel/EngineImpl.cpp @@ -8,18 +8,20 @@ #include #include #include -#include -#include "mc/mc.h" #include "src/kernel/EngineImpl.hpp" #include "src/kernel/resource/StandardLinkImpl.hpp" #include "src/kernel/resource/profile/Profile.hpp" +#include "src/kernel/xml/platf.hpp" +#include "src/mc/mc.h" #include "src/mc/mc_record.hpp" #include "src/mc/mc_replay.hpp" +#include "src/simgrid/math_utils.h" +#include "src/simgrid/sg_config.hpp" #include "src/smpi/include/smpi_actor.hpp" -#include "src/surf/xml/platf.hpp" -#include "xbt/module.h" -#include "xbt/xbt_modinter.h" /* whether initialization was already done */ +#include "src/xbt/xbt_modinter.h" /* whether initialization was already done */ + +#include "xbt/log.hpp" #include #include @@ -138,6 +140,15 @@ static void install_signal_handlers() } } +static simgrid::config::Flag cfg_dbg_clean_atexit{ + "debug/clean-atexit", "Whether to cleanup SimGrid at exit. Disable it if your code segfaults after its end.", true}; +static void xbt_postexit() +{ + if (not cfg_dbg_clean_atexit) + return; + xbt_log_postexit(); +} + namespace simgrid::kernel { EngineImpl::~EngineImpl() @@ -174,8 +185,18 @@ void EngineImpl::initialize(int* argc, char** argv) simgrid::mc::AppSide::initialize(); #endif - if (xbt_initialized == 0) { - xbt_init(argc, argv); + static bool inited = false; + if (not inited) { + inited = true; + atexit(xbt_postexit); + xbt_log_init(argc, argv); + + simgrid::xbt::install_exception_handler(); + + if (*argc > 0) + simgrid::xbt::binary_name = argv[0]; + for (int i = 0; i < *argc; i++) + simgrid::xbt::cmdline.emplace_back(argv[i]); sg_config_init(argc, argv); } @@ -184,10 +205,10 @@ void EngineImpl::initialize(int* argc, char** argv) install_signal_handlers(); - /* register a function to be called by SURF after the environment creation */ + /* register a function to be called after the environment creation */ s4u::Engine::on_platform_created_cb([this]() { this->presolve(); }); - if (config::get_value("debug/clean-atexit")) + if (cfg_dbg_clean_atexit) atexit(shutdown); } @@ -313,9 +334,9 @@ void EngineImpl::load_deployment(const std::string& file) const { sg_platf_parser_finalize(); - surf_parse_open(file); - surf_parse(); - surf_parse_close(); + simgrid_parse_open(file); + simgrid_parse(); + simgrid_parse_close(); } void EngineImpl::register_function(const std::string& name, const actor::ActorCodeFactory& code) @@ -341,7 +362,7 @@ void EngineImpl::add_model(std::shared_ptr model, const std::ve models_prio_[model_name] = std::move(model); } -/** Wake up all actors waiting for a Surf action to finish */ +/** Wake up all actors waiting for an action to finish */ void EngineImpl::handle_ended_actions() const { for (auto const& model : models_) { @@ -551,13 +572,12 @@ double EngineImpl::solve(double max_date) const 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())) { + if (resource->is_used()) { time_delta = next_event_date - now_; XBT_DEBUG("This event invalidates the next_occurring_event() computation of models. Next event set to %f", time_delta); } - // FIXME: I'm too lame to update now_ live, so I change it and restore it so that the real update with surf_min - // will work + // FIXME: I'm too lame to update now_ live, so I change it and restore it so that the real update works double round_start = now_; now_ = next_event_date; /* update state of the corresponding resource to the new value. Does not touch lmm.