X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/90f32f7c90becc16c9d62c3e2aee19b904698b3d..7b8301c7b24916c15434108eebc479e8e7603ece:/src/simix/smx_host.cpp diff --git a/src/simix/smx_host.cpp b/src/simix/smx_host.cpp index d2d8550198..7eaf2bb054 100644 --- a/src/simix/smx_host.cpp +++ b/src/simix/smx_host.cpp @@ -46,56 +46,35 @@ 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); } - } -} - -/** @brief Internal function to create a SIMIX host. */ -void SIMIX_host_create(sg_host_t host) -{ - sg_host_simix_set(host, new simgrid::simix::Host()); -} -/** @brief Start the host if it is off */ -void SIMIX_host_on(sg_host_t h) -{ - smx_host_priv_t host = sg_host_simix(h); - - xbt_assert((host != nullptr), "Invalid parameters"); - - if (h->isOff()) { - simgrid::surf::HostImpl* surf_host = h->extension(); - surf_host->turnOn(); - - unsigned int cpt; - smx_process_arg_t arg; - xbt_dynar_foreach(host->boot_processes,cpt,arg) { - XBT_DEBUG("Booting Process %s(%s) right now", - arg->name.c_str(), arg->hostname); - if (simix_global->create_process_function) { + /** Re-starts all the actors that are marked as restartable. + * + * Weird things will happen if you turn on an host that is already on. S4U is fool-proof, not this. + */ + void Host::turnOn() + { + unsigned int cpt; + smx_process_arg_t arg; + xbt_dynar_foreach(boot_processes,cpt,arg) { + XBT_DEBUG("Booting 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); - } else { - simcall_process_create(arg->name.c_str(), - arg->code, - nullptr, - arg->hostname, - arg->kill_time, - arg->properties, - arg->auto_restart); + arg->code, + nullptr, + arg->hostname, + arg->kill_time, + arg->properties, + arg->auto_restart, + nullptr); } } - } -} + +}} // namespaces /** @brief Stop the host if it is on */ void SIMIX_host_off(sg_host_t h, smx_actor_t issuer) @@ -156,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); @@ -172,29 +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); - if (simix_global->create_process_function) { - simix_global->create_process_function(arg->name.c_str(), arg->code, nullptr, arg->hostname, arg->kill_time, - arg->properties, arg->auto_restart, nullptr); - } else { - simcall_process_create(arg->name.c_str(), arg->code, nullptr, arg->hostname, arg->kill_time, arg->properties, - arg->auto_restart); - } + 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,