X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f748ce48955ffc37989647090ef5b5a6676b7cd1..abd9f0ae086cef85194d86bb6019f30e3980f931:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index bbea457dd7..115a0e8468 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -33,7 +33,7 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); void simcall_call(smx_process_t process) { if (process != simix_global->maestro_process) { - XBT_DEBUG("Yield process '%s' on simcall %s (%d)", process->name, + XBT_DEBUG("Yield process '%s' on simcall %s (%d)", process->name.c_str(), SIMIX_simcall_name(process->simcall.call), (int)process->simcall.call); SIMIX_process_yield(process); } else { @@ -375,9 +375,16 @@ smx_process_t simcall_process_create(const char *name, xbt_dict_t properties, int auto_restart) { - return (smx_process_t) simcall_BODY_process_create(name, code, data, hostname, - kill_time, argc, argv, properties, - auto_restart); + if (name == nullptr) + name = ""; + 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; } /** @@ -518,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. @@ -532,13 +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, - 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