- 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 = xbt_new(s_smx_process_arg_t,1);
- arg->name = xbt_strdup(name);
- arg->code = code;
- arg->data = data;
- arg->hostname = hostname;
- arg->kill_time = kill_time;
- arg->argc = argc;
-
- arg->argv = xbt_new(char*,argc + 1);
-
- int i;
- for (i = 0; i < argc; i++) {
- arg->argv[i] = xbt_strdup(argv[i]);
- }
- arg->argv[argc] = NULL;
-
- arg->properties = properties;
- arg->auto_restart = auto_restart;
-
- if( ! sg_host_is_on(host)
- && !xbt_dict_get_or_null(watched_hosts_lib,sg_host_get_name(host))){
- xbt_dict_set(watched_hosts_lib,sg_host_get_name(host),host,NULL);
- XBT_DEBUG("Have pushed 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);
-}
-/**
- * \brief Restart the list of processes that have been registered to the host
- */
-void SIMIX_host_restart_processes(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)
- return;
-
- xbt_dynar_foreach (process_list, cpt, arg) {
-
- XBT_DEBUG("Restarting Process %s(%s) right now", arg->argv[0], arg->hostname);
- if (simix_global->create_process_function) {
- simix_global->create_process_function(arg->argv[0],
- arg->code,
- NULL,
- arg->hostname,
- arg->kill_time,
- arg->argc,
- arg->argv,
- arg->properties,
- arg->auto_restart,
- NULL);
- } else {
- simcall_process_create(arg->argv[0],
- (xbt_main_func_t) arg->code,
- NULL,
- arg->hostname,
- arg->kill_time,
- arg->argc,
- arg->argv,
- arg->properties,
- arg->auto_restart);
+ simgrid::simix::ProcessArg* arg =
+ new simgrid::simix::ProcessArg(name, code, data, host, kill_time, nullptr, auto_restart);
+ arg->properties.reset(properties, [](decltype(properties)) {});