From 7b8301c7b24916c15434108eebc479e8e7603ece Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Mon, 12 Sep 2016 22:50:58 +0200 Subject: [PATCH 1/1] convert a dynar into a vector --- src/simix/smx_host.cpp | 19 ++++++++----------- src/simix/smx_host_private.h | 8 +++++--- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/simix/smx_host.cpp b/src/simix/smx_host.cpp index a835e87bd2..7eaf2bb054 100644 --- a/src/simix/smx_host.cpp +++ b/src/simix/smx_host.cpp @@ -46,7 +46,9 @@ namespace simgrid { SIMIX_display_process_status(); THROWF(arg_error, 0, "%s", msg); } - xbt_dynar_free(&auto_restart_processes); + for (auto arg : auto_restart_processes) + delete arg; + auto_restart_processes.clear(); xbt_dynar_free(&boot_processes); xbt_swag_free(process_list); } @@ -133,9 +135,6 @@ void SIMIX_host_add_auto_restart_process( void* data, const char *hostname, double kill_time, xbt_dict_t properties, int auto_restart) { - if (!sg_host_simix(host)->auto_restart_processes) { - sg_host_simix(host)->auto_restart_processes = xbt_dynar_new(sizeof(smx_process_arg_t),_SIMIX_host_free_process_arg); - } smx_process_arg_t arg = new simgrid::simix::ProcessArg(); arg->name = name; arg->code = std::move(code); @@ -149,24 +148,22 @@ void SIMIX_host_add_auto_restart_process( xbt_dict_set(watched_hosts_lib,sg_host_get_name(host),host,nullptr); XBT_DEBUG("Push host %s to watched_hosts_lib because state == SURF_RESOURCE_OFF",sg_host_get_name(host)); } - xbt_dynar_push_as(sg_host_simix(host)->auto_restart_processes,smx_process_arg_t,arg); + sg_host_simix(host)->auto_restart_processes.push_back(arg); } /** @brief Restart the list of processes that have been registered to the host */ void SIMIX_host_autorestart(sg_host_t host) { - unsigned int cpt; - smx_process_arg_t arg; - xbt_dynar_t process_list = sg_host_simix(host)->auto_restart_processes; - if (!process_list) + std::vector process_list = sg_host_simix(host)->auto_restart_processes; + if (process_list.empty()) return; - xbt_dynar_foreach (process_list, cpt, arg) { + for (auto arg : process_list) { XBT_DEBUG("Restarting Process %s(%s) right now", arg->name.c_str(), arg->hostname); simix_global->create_process_function(arg->name.c_str(), arg->code, nullptr, arg->hostname, arg->kill_time, arg->properties, arg->auto_restart, nullptr); } - xbt_dynar_reset(process_list); + process_list.clear(); } smx_activity_t simcall_HANDLER_execution_start(smx_simcall_t simcall, const char* name, double flops_amount, diff --git a/src/simix/smx_host_private.h b/src/simix/smx_host_private.h index 2ec8a24b4a..7d3fd3d412 100644 --- a/src/simix/smx_host_private.h +++ b/src/simix/smx_host_private.h @@ -7,6 +7,7 @@ #ifndef _SIMIX_HOST_PRIVATE_H #define _SIMIX_HOST_PRIVATE_H +#include #include #include @@ -17,11 +18,11 @@ #include "src/kernel/activity/SynchroExec.hpp" -SG_BEGIN_DECL() - /** @brief Host datatype from SIMIX POV */ namespace simgrid { namespace simix { + class ProcessArg; + class Host { public: static simgrid::xbt::Extension EXTENSION_ID; @@ -30,7 +31,7 @@ namespace simgrid { virtual ~Host(); xbt_swag_t process_list; - xbt_dynar_t auto_restart_processes = nullptr; + std::vector auto_restart_processes; xbt_dynar_t boot_processes = nullptr; void turnOn(); @@ -39,6 +40,7 @@ namespace simgrid { } typedef simgrid::simix::Host s_smx_host_priv_t; +SG_BEGIN_DECL() XBT_PRIVATE void _SIMIX_host_free_process_arg(void *); XBT_PRIVATE void SIMIX_host_add_auto_restart_process(sg_host_t host, -- 2.20.1