X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5942182c3a29de424e91a87f019a596b3a2e71bf..abd9f0ae086cef85194d86bb6019f30e3980f931:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index aa0a3c42a7..115a0e8468 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -377,9 +377,14 @@ smx_process_t simcall_process_create(const char *name, { if (name == nullptr) name = ""; - return (smx_process_t) simcall_BODY_process_create(name, code, data, hostname, - kill_time, argc, argv, properties, - auto_restart); + auto wrapped_code = simgrid::simix::wrap_main(code, argc, argv); + for (int i = 0; i != argc; ++i) + xbt_free(argv[i]); + xbt_free(argv); + smx_process_t res = simcall_process_create(name, + std::move(wrapped_code), + data, hostname, kill_time, properties, auto_restart); + return res; } /** @@ -520,13 +525,6 @@ void simcall_process_set_data(smx_process_t process, void *data) simgrid::simix::kernel(std::bind(SIMIX_process_set_data, process, data)); } -static void kill_process_from_timer(void* arg) -{ - smx_process_t process = (smx_process_t) arg; - simix_global->kill_process_function(process); - process->kill_timer=NULL; -} - /** * \ingroup simix_process_management * \brief Set the kill time of a process. @@ -534,14 +532,14 @@ static void kill_process_from_timer(void* arg) void simcall_process_set_kill_time(smx_process_t process, double kill_time) { - if (kill_time > SIMIX_get_clock()) { - if (simix_global->kill_process_function) { - XBT_DEBUG("Set kill time %f for process %s(%s)", - kill_time, process->name.c_str(), - sg_host_get_name(process->host)); - process->kill_timer = SIMIX_timer_set(kill_time, kill_process_from_timer, process); - } - } + if (kill_time <= SIMIX_get_clock() || simix_global->kill_process_function == nullptr) + return; + XBT_DEBUG("Set kill time %f for process %s(%s)", + kill_time, process->name.c_str(), sg_host_get_name(process->host)); + process->kill_timer = SIMIX_timer_set(kill_time, [=] { + simix_global->kill_process_function(process); + process->kill_timer=NULL; + }); } /** * \ingroup simix_process_management