// start the new process
ActorImpl* actor = simix_global->create_process_function(arg.name.c_str(), std::move(arg.code), arg.data, arg.host,
- arg.properties, nullptr);
+ arg.properties.get(), nullptr);
if (arg.kill_time >= 0)
simcall_process_set_kill_time(actor, arg.kill_time);
if (arg.auto_restart)
void *data = nullptr;
sg_host_t host = nullptr;
double kill_time = 0.0;
- std::map<std::string, std::string>* properties = nullptr;
+ std::shared_ptr<std::map<std::string, std::string>> properties;
bool auto_restart = false;
};
for (auto const& arg : boot_processes) {
XBT_DEBUG("Booting Process %s(%s) right now", arg->name.c_str(), arg->host->getCname());
smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), arg->code, nullptr, arg->host,
- arg->properties, nullptr);
+ arg->properties.get(), nullptr);
if (arg->kill_time >= 0)
simcall_process_set_kill_time(actor, arg->kill_time);
if (arg->auto_restart)
arg->data = data;
arg->host = host;
arg->kill_time = kill_time;
- arg->properties = properties;
+ arg->properties.reset(properties, [](decltype(properties)) {});
arg->auto_restart = auto_restart;
if (host->isOff() && watched_hosts.find(host->getCname()) == watched_hosts.end()) {
for (auto const& arg : process_list) {
XBT_DEBUG("Restarting Process %s@%s right now", arg->name.c_str(), arg->host->getCname());
smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), arg->code, nullptr, arg->host,
- arg->properties, nullptr);
+ arg->properties.get(), nullptr);
if (arg->kill_time >= 0)
simcall_process_set_kill_time(actor, arg->kill_time);
if (arg->auto_restart)
std::vector<std::string> args(process->argv, process->argv + process->argc);
std::function<void()> code = factory(std::move(args));
+ std::shared_ptr<std::map<std::string, std::string>> properties(process->properties);
smx_process_arg_t arg = nullptr;
arg->data = nullptr;
arg->host = host;
arg->kill_time = kill_time;
- arg->properties = process->properties;
+ arg->properties = properties;
host->extension<simgrid::simix::Host>()->boot_processes.push_back(arg);
arg->data = nullptr;
arg->host = host;
arg->kill_time = kill_time;
- arg->properties = process->properties;
+ arg->properties = properties;
XBT_DEBUG("Process %s@%s will be started at time %f", arg->name.c_str(), arg->host->getCname(), start_time);
SIMIX_timer_set(start_time, [arg, auto_restart]() {
smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), std::move(arg->code), arg->data,
- arg->host, arg->properties, nullptr);
+ arg->host, arg->properties.get(), nullptr);
if (arg->kill_time >= 0)
simcall_process_set_kill_time(actor, arg->kill_time);
if (auto_restart)
XBT_DEBUG("Starting Process %s(%s) right now", arg->name.c_str(), host->getCname());
smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), std::move(code), nullptr, host,
- arg->properties, nullptr);
+ arg->properties.get(), nullptr);
/* The actor creation will fail if the host is currently dead, but that's fine */
if (actor != nullptr) {
SIMIX_process_auto_restart_set(actor, auto_restart);
}
}
- current_property_set = nullptr;
}
void sg_platf_new_peer(PeerCreationArgs* peer)
/* platf_private.h - Interface to the SimGrid platforms which visibility should be limited to this directory */
-/* Copyright (c) 2004-2015. The SimGrid Team.
+/* Copyright (c) 2004-2017. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
int routing;
};
-/* The default current property receiver. Setup in the corresponding opening callbacks. */
-extern std::map<std::string, std::string>* current_property_set;
-
/********** Routing **********/
void routing_cluster_add_backbone(simgrid::surf::LinkImpl* bb);
/*** END of the parsing cruft ***/
s_sg_platf_process_cbarg_t actor;
memset(&actor,0,sizeof(actor));
+ actor.properties = current_property_set;
+ current_property_set = nullptr;
+
actor.argc = argc;
actor.argv = (const char **)argv;
- actor.properties = current_property_set;
actor.host = A_surfxml_actor_host;
actor.function = A_surfxml_actor_function;
actor.start_time = surf_parse_get_double(A_surfxml_actor_start___time);
xbt_free(argv[i]);
xbt_free(argv);
argv = nullptr;
-
- current_property_set = nullptr;
}
void STag_surfxml_argument(){