X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a250bd9db089b639e2298265b21577765a51f1bc..c139b4e36702f58bd8a75e87cf537959da82dbc9:/src/simix/smx_global.cpp diff --git a/src/simix/smx_global.cpp b/src/simix/smx_global.cpp index 80653b045b..cdad122f8a 100644 --- a/src/simix/smx_global.cpp +++ b/src/simix/smx_global.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -11,7 +11,6 @@ #include /* Signal handling */ #include -#include #include #include @@ -24,7 +23,7 @@ #include "xbt/ex.h" /* ex_backtrace_display */ #include "mc/mc.h" -#include "simgrid/sg_config.h" +#include "simgrid/sg_config.hpp" #include "src/mc/mc_replay.hpp" #include "src/surf/StorageImpl.hpp" @@ -69,7 +68,7 @@ public: s_smx_timer_t(double date, simgrid::xbt::Task callback) : date(date), callback(std::move(callback)) {} }; -void (*SMPI_switch_data_segment)(int) = nullptr; +void (*SMPI_switch_data_segment)(simgrid::s4u::ActorPtr) = nullptr; int _sg_do_verbose_exit = 1; static void inthandler(int) @@ -104,7 +103,7 @@ static void segvhandler(int signum, siginfo_t* siginfo, void* /*context*/) } else if (siginfo->si_signo == SIGSEGV) { fprintf(stderr, "Segmentation fault.\n"); #if HAVE_SMPI - if (smpi_enabled() && smpi_privatize_global_variables == SMPI_PRIVATIZE_NONE) { + if (smpi_enabled() && smpi_privatize_global_variables == SmpiPrivStrategies::None) { #if HAVE_PRIVATIZATION fprintf(stderr, "Try to enable SMPI variable privatization with --cfg=smpi/privatization:yes.\n"); #else @@ -170,21 +169,16 @@ static void kill_process(smx_actor_t process) SIMIX_process_kill(process, nullptr); } -static std::function maestro_code; namespace simgrid { namespace simix { simgrid::xbt::signal onDeadlock; -XBT_PUBLIC(void) set_maestro(std::function code) -{ - maestro_code = std::move(code); -} - } } +static std::function maestro_code; void SIMIX_set_maestro(void (*code)(void*), void* data) { #ifdef _WIN32 @@ -196,9 +190,6 @@ void SIMIX_set_maestro(void (*code)(void*), void* data) /** * \ingroup SIMIX_API * \brief Initialize SIMIX internal data. - * - * \param argc Argc - * \param argv Argv */ void SIMIX_global_init(int *argc, char **argv) { @@ -221,7 +212,7 @@ void SIMIX_global_init(int *argc, char **argv) // Either create a new context with maestro or create // a context object with the current context mestro): - simgrid::simix::create_maestro(maestro_code); + simgrid::kernel::actor::create_maestro(maestro_code); /* Prepare to display some more info when dying on Ctrl-C pressing */ signal(SIGINT, inthandler); @@ -238,8 +229,8 @@ void SIMIX_global_init(int *argc, char **argv) }); simgrid::surf::storageCreatedCallbacks.connect([](simgrid::surf::StorageImpl* storage) { - sg_storage_t s = simgrid::s4u::Storage::byName(storage->getCname()); - xbt_assert(s != nullptr, "Storage not found for name %s", storage->getCname()); + sg_storage_t s = simgrid::s4u::Storage::byName(storage->get_cname()); + xbt_assert(s != nullptr, "Storage not found for name %s", storage->get_cname()); }); } @@ -283,7 +274,7 @@ void SIMIX_clean() #endif /* Kill all processes (but maestro) */ - SIMIX_process_killall(simix_global->maestro_process, 1); + SIMIX_process_killall(simix_global->maestro_process); SIMIX_context_runall(); SIMIX_process_empty_trash(); @@ -340,21 +331,21 @@ double SIMIX_get_clock() /** Wake up all processes waiting for a Surf action to finish */ static void SIMIX_wake_processes() { - surf_action_t action; - for (auto const& model : *all_existing_models) { + simgrid::kernel::resource::Action* action; + XBT_DEBUG("Handling the processes whose action failed (if any)"); while ((action = surf_model_extract_failed_action_set(model))) { XBT_DEBUG(" Handling Action %p",action); - SIMIX_simcall_exit(static_cast(action->getData())); + SIMIX_simcall_exit(static_cast(action->get_data())); } XBT_DEBUG("Handling the processes whose action terminated normally (if any)"); while ((action = surf_model_extract_done_action_set(model))) { XBT_DEBUG(" Handling Action %p",action); - if (action->getData() == nullptr) + if (action->get_data() == nullptr) XBT_DEBUG("probably vcpu's action %p, skip", action); else - SIMIX_simcall_exit(static_cast(action->getData())); + SIMIX_simcall_exit(static_cast(action->get_data())); } } } @@ -505,7 +496,7 @@ void SIMIX_run() /* If only daemon processes remain, cancel their actions, mark them to die and reschedule them */ if (simix_global->process_list.size() == simix_global->daemons.size()) for (auto const& dmon : simix_global->daemons) { - XBT_DEBUG("Kill %s", dmon->getCname()); + XBT_DEBUG("Kill %s", dmon->get_cname()); SIMIX_process_kill(dmon, simix_global->maestro_process); } } @@ -532,7 +523,7 @@ void SIMIX_run() /* Autorestart all process */ for (auto const& host : host_that_restart) { - XBT_INFO("Restart processes on host %s", host->getCname()); + XBT_INFO("Restart processes on host %s", host->get_cname()); SIMIX_host_autorestart(host); } host_that_restart.clear(); @@ -554,6 +545,7 @@ void SIMIX_run() XBT_CRITICAL("Oops ! Deadlock or code not perfectly clean."); SIMIX_display_process_status(); + simgrid::s4u::onDeadlock(); xbt_abort(); } simgrid::s4u::onSimulationEnd(); @@ -661,12 +653,12 @@ void SIMIX_display_process_status() if (boost::dynamic_pointer_cast(process->waiting_synchro) != nullptr) synchro_description = "I/O"; - XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish", process->pid, - process->getCname(), process->host->getCname(), synchro_description, process->waiting_synchro.get(), + XBT_INFO("Process %ld (%s@%s): waiting for %s synchro %p (%s) in state %d to finish", process->pid, + process->get_cname(), process->host->get_cname(), synchro_description, process->waiting_synchro.get(), process->waiting_synchro->name.c_str(), (int)process->waiting_synchro->state); } else { - XBT_INFO("Process %lu (%s@%s)", process->pid, process->getCname(), process->host->getCname()); + XBT_INFO("Process %ld (%s@%s)", process->pid, process->get_cname(), process->host->get_cname()); } } }