X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f5792a3bf76ce15a573ae5e9c63097595ae5f2bd..47e39aa9787af784b651e6be2ed219d0d40234fb:/src/simix/smx_global.cpp diff --git a/src/simix/smx_global.cpp b/src/simix/smx_global.cpp index 2aa1d17443..90deaa8ede 100644 --- a/src/simix/smx_global.cpp +++ b/src/simix/smx_global.cpp @@ -54,11 +54,13 @@ std::unique_ptr simix_global; static xbt_heap_t simix_timers = nullptr; /** @brief Timer datatype */ -typedef struct s_smx_timer { +typedef class s_smx_timer { double date = 0.0; - simgrid::xbt::Task callback; + s_smx_timer() = default; - s_smx_timer()=default; +public: + simgrid::xbt::Task callback; + double getDate() { return date; } s_smx_timer(double date, simgrid::xbt::Task callback) : date(date), callback(std::move(callback)) {} } s_smx_timer_t; @@ -338,7 +340,7 @@ static void SIMIX_wake_processes() { surf_action_t action; - for(auto model : *all_existing_models) { + for (auto const& model : *all_existing_models) { 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); @@ -425,20 +427,6 @@ void SIMIX_run() /* Run all processes that are ready to run, possibly in parallel */ SIMIX_process_runall(); - /* Move all killer processes to the end of the list, because killing a process that have an ongoing simcall is a bad idea */ - simgrid::xbt::three_way_partition(begin(simix_global->process_that_ran), end(simix_global->process_that_ran), - [](smx_actor_t p) { - switch (p->simcall.call) { - case SIMCALL_NONE: - case SIMCALL_PROCESS_KILL: - return 2; - // case SIMCALL_PROCESS_RESUME: - // return 1; - default: - return 0; - } - }); - /* answer sequentially and in a fixed arbitrary order all the simcalls that were issued during that sub-round */ /* WARNING, the order *must* be fixed or you'll jeopardize the simulation reproducibility (see RR-7653) */ @@ -494,7 +482,7 @@ void SIMIX_run() * That would thus be a pure waste of time. */ - for (smx_actor_t process : simix_global->process_that_ran) { + for (smx_actor_t const& process : simix_global->process_that_ran) { if (process->simcall.call != SIMCALL_NONE) { SIMIX_simcall_handle(&process->simcall, 0); } @@ -507,7 +495,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 (const auto& dmon : simix_global->daemons) { + for (auto const& dmon : simix_global->daemons) { XBT_DEBUG("Kill %s", dmon->cname()); SIMIX_process_kill(dmon, simix_global->maestro_process); } @@ -534,7 +522,7 @@ void SIMIX_run() } while (again); /* Autorestart all process */ - for (auto host: host_that_restart) { + for (auto const& host : host_that_restart) { XBT_INFO("Restart processes on host %s", host->getCname()); SIMIX_host_autorestart(host); } @@ -587,12 +575,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; } /** @@ -641,7 +629,7 @@ void SIMIX_display_process_status() XBT_INFO("%d processes are still running, waiting for something.", nbprocess); /* List the process and their state */ XBT_INFO("Legend of the following listing: \"Process (@): \""); - for (auto kv : simix_global->process_list) { + for (auto const& kv : simix_global->process_list) { smx_actor_t process = kv.second; if (process->waiting_synchro) {