X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e18a7b043d161b29d0bf3f5743cb7a570241576a..6cd95ee3fd6aa6fdef43951c5ac09b422e58b363:/src/simix/smx_global.cpp diff --git a/src/simix/smx_global.cpp b/src/simix/smx_global.cpp index 1babc159c4..b54b7cb24e 100644 --- a/src/simix/smx_global.cpp +++ b/src/simix/smx_global.cpp @@ -16,10 +16,10 @@ #include "simgrid/s4u/Engine.hpp" #include "simgrid/s4u/Host.hpp" +#include "smx_private.hpp" #include "src/surf/surf_interface.hpp" #include "src/surf/xml/platf.hpp" -#include "smx_private.h" -#include "xbt/ex.h" /* ex_backtrace_display */ +#include "xbt/ex.h" /* ex_backtrace_display */ #include "mc/mc.h" #include "simgrid/sg_config.h" @@ -35,15 +35,14 @@ #include "src/kernel/activity/SynchroRaw.hpp" #if SIMGRID_HAVE_MC -#include "src/mc/mc_private.h" +#include "src/mc/mc_private.hpp" #include "src/mc/remote/Client.hpp" #include "src/mc/remote/mc_protocol.h" #endif -#include "src/mc/mc_record.h" +#include "src/mc/mc_record.hpp" #if HAVE_SMPI -#include "src/smpi/include/private.h" #include "src/smpi/include/private.hpp" #endif @@ -54,13 +53,15 @@ std::unique_ptr simix_global; static xbt_heap_t simix_timers = nullptr; /** @brief Timer datatype */ -typedef struct s_smx_timer { +class s_smx_timer_t { double date = 0.0; - simgrid::xbt::Task callback; + s_smx_timer_t() = default; - s_smx_timer()=default; - s_smx_timer(double date, simgrid::xbt::Task callback) : date(date), callback(std::move(callback)) {} -} s_smx_timer_t; +public: + simgrid::xbt::Task callback; + double getDate() { return date; } + s_smx_timer_t(double date, simgrid::xbt::Task callback) : date(date), callback(std::move(callback)) {} +}; void (*SMPI_switch_data_segment)(int) = nullptr; @@ -84,7 +85,7 @@ static void segvhandler(int signum, siginfo_t *siginfo, void *context) fprintf(stderr, "Access violation detected.\n" "This probably comes from a programming error in your code, or from a stack\n" "overflow. If you are certain of your code, try increasing the stack size\n" - " --cfg=contexts/stack-size=XXX (current size is %d KiB).\n" + " --cfg=contexts/stack-size=XXX (current size is %u KiB).\n" "\n" "If it does not help, this may have one of the following causes:\n" "a bug in SimGrid, a bug in the OS or a bug in a third-party libraries.\n" @@ -234,8 +235,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->cname()); - xbt_assert(s != nullptr, "Storage not found for name %s", storage->cname()); + sg_storage_t s = simgrid::s4u::Storage::byName(storage->getCname()); + xbt_assert(s != nullptr, "Storage not found for name %s", storage->getCname()); }); } @@ -284,6 +285,8 @@ void SIMIX_clean() } /* Kill all processes (but maestro) */ SIMIX_process_killall(simix_global->maestro_process, 1); + SIMIX_context_runall(); + SIMIX_process_empty_trash(); /* Exit the SIMIX network module */ SIMIX_mailbox_exit(); @@ -494,13 +497,13 @@ 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->cname()); + XBT_DEBUG("Kill %s", dmon->getCname()); SIMIX_process_kill(dmon, simix_global->maestro_process); } } time = SIMIX_timer_next(); - if (time > -1.0 || simix_global->process_list.empty() == false) { + if (time > -1.0 || not simix_global->process_list.empty()) { XBT_DEBUG("Calling surf_solve"); time = surf_solve(time); XBT_DEBUG("Moving time ahead : %g", time); @@ -537,7 +540,7 @@ void SIMIX_run() } while (time > -1.0 || not simix_global->process_to_run.empty()); - if (simix_global->process_list.size() != 0) { + if (not simix_global->process_list.empty()) { TRACE_end(); @@ -573,12 +576,12 @@ smx_timer_t SIMIX_timer_set(double date, simgrid::xbt::Task callback) /** @brief cancels a timer that was added earlier */ void SIMIX_timer_remove(smx_timer_t timer) { - xbt_heap_rm_elm(simix_timers, timer, timer->date); + delete static_cast(xbt_heap_rm_elm(simix_timers, timer, timer->getDate())); } /** @brief Returns the date at which the timer will trigger (or 0 if nullptr timer) */ double SIMIX_timer_get_date(smx_timer_t timer) { - return timer?timer->date:0; + return timer ? timer->getDate() : 0; } /** @@ -650,11 +653,11 @@ void SIMIX_display_process_status() synchro_description = "I/O"; XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish", process->pid, - process->cname(), process->host->getCname(), synchro_description, process->waiting_synchro.get(), + process->getCname(), process->host->getCname(), 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->cname(), process->host->getCname()); + XBT_INFO("Process %lu (%s@%s)", process->pid, process->getCname(), process->host->getCname()); } } }