extern "C"
XBT_PUBLIC(void) SIMIX_function_register_process_create(smx_creation_func_t function);
+XBT_PUBLIC(smx_process_t) simcall_process_create(const char *name,
+ xbt_main_func_t code,
+ void *data,
+ const char *hostname,
+ double kill_time,
+ simgrid::simix::args args,
+ xbt_dict_t properties,
+ int auto_restart);
+
#endif
XBT_PRIVATE void TRACE_msg_vm_end(msg_vm_t vm);
SG_END_DECL()
+
+XBT_PUBLIC(msg_process_t) MSG_process_create_with_environment(
+ const char *name, xbt_main_func_t code, void *data,
+ msg_host_t host, simgrid::simix::args args,
+ xbt_dict_t properties);
+
#endif
* \return The new corresponding object.
*/
msg_process_t MSG_process_create_with_environment(const char *name, xbt_main_func_t code, void *data, msg_host_t host,
- int argc, char **argv, xbt_dict_t properties)
+ int argc, char **argv, xbt_dict_t properties)
+{
+ msg_process_t res = MSG_process_create_with_environment(name, code, data, host,
+ simgrid::simix::args(argc, argv), properties);
+ for (int i = 0; i != argc; ++i)
+ xbt_free(argv[i]);
+ xbt_free(argv);
+ return res;
+}
+
+msg_process_t MSG_process_create_with_environment(
+ const char *name, xbt_main_func_t code, void *data,
+ msg_host_t host, simgrid::simix::args args,
+ xbt_dict_t properties)
{
xbt_assert(code != NULL && host != NULL, "Invalid parameters: host and code params must not be NULL");
simdata_process_t simdata = xbt_new0(s_simdata_process_t, 1);
/* Let's create the process: SIMIX may decide to start it right now,
* even before returning the flow control to us */
- process = simcall_process_create(name, code, simdata, sg_host_get_name(host), -1, argc, argv, properties,0);
+ process = simcall_process_create(
+ name, code, simdata, sg_host_get_name(host), -1, std::move(args), properties, 0);
if (!process) {
/* Undo everything we have just changed */
NULL,
arg->hostname,
arg->kill_time,
- arg->args.argc(), arg->args.to_argv(),
+ arg->args,
arg->properties,
arg->auto_restart);
}
NULL,
arg->hostname,
arg->kill_time,
- arg->args.argc(), arg->args.to_argv(),
+ arg->args,
arg->properties,
arg->auto_restart);
}
return simcall_process_create(
arg.name.c_str(), arg.code, arg.data,
arg.hostname, arg.kill_time,
- arg.args.argc(), arg.args.to_argv(),
+ arg.args,
arg.properties, arg.auto_restart);
}
void SIMIX_segment_index_set(smx_process_t proc, int index){
proc->segment_index = index;
}
+
+smx_process_t simcall_process_create(const char *name,
+ xbt_main_func_t code,
+ void *data,
+ const char *hostname,
+ double kill_time,
+ simgrid::simix::args args,
+ xbt_dict_t properties,
+ int auto_restart)
+{
+ if (name == nullptr)
+ name = "";
+ smx_process_t self = SIMIX_process_self();
+ return simgrid::simix::kernel([&] {
+ return SIMIX_process_create(name, code, data, hostname,
+ kill_time, std::move(args), properties, auto_restart,
+ self);
+ });
+}
\ No newline at end of file
else
process_created = simcall_process_create(
arg->name.c_str(), parse_code, NULL, sg_host_get_name(host), kill_time,
- arg->args.argc(), arg->args.to_argv(), current_property_set,auto_restart);
+ arg->args, current_property_set,auto_restart);
/* verify if process has been created (won't be the case if the host is currently dead, but that's fine) */
if (!process_created) {