From: Gabriel Corona Date: Wed, 25 May 2016 08:13:16 +0000 (+0200) Subject: [simix] Remove the process_create simcall X-Git-Tag: v3_14~1168 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/d0ac50e071a5fc760cd64d908b24ae1756dcf00e [simix] Remove the process_create simcall Use simgrid::simix::kernel() instead. --- diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 2735d02016..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; } /** diff --git a/src/simix/popping_accessors.h b/src/simix/popping_accessors.h index f5f1a3fdca..b5fff63fc5 100644 --- a/src/simix/popping_accessors.h +++ b/src/simix/popping_accessors.h @@ -49,67 +49,6 @@ static inline void simcall_vm_restore__set__ind_vm(smx_simcall_t simcall, void* simcall->args[0].dp = arg; } -static inline const char* simcall_process_create__get__name(smx_simcall_t simcall) { - return simcall->args[0].cc; -} -static inline void simcall_process_create__set__name(smx_simcall_t simcall, const char* arg) { - simcall->args[0].cc = arg; -} -static inline xbt_main_func_t simcall_process_create__get__code(smx_simcall_t simcall) { - return (xbt_main_func_t) simcall->args[1].fp; -} -static inline void simcall_process_create__set__code(smx_simcall_t simcall, FPtr arg) { - simcall->args[1].fp = arg; -} -static inline void* simcall_process_create__get__data(smx_simcall_t simcall) { - return simcall->args[2].dp; -} -static inline void simcall_process_create__set__data(smx_simcall_t simcall, void* arg) { - simcall->args[2].dp = arg; -} -static inline const char* simcall_process_create__get__hostname(smx_simcall_t simcall) { - return simcall->args[3].cc; -} -static inline void simcall_process_create__set__hostname(smx_simcall_t simcall, const char* arg) { - simcall->args[3].cc = arg; -} -static inline double simcall_process_create__get__kill_time(smx_simcall_t simcall) { - return simcall->args[4].d; -} -static inline void simcall_process_create__set__kill_time(smx_simcall_t simcall, double arg) { - simcall->args[4].d = arg; -} -static inline int simcall_process_create__get__argc(smx_simcall_t simcall) { - return simcall->args[5].i; -} -static inline void simcall_process_create__set__argc(smx_simcall_t simcall, int arg) { - simcall->args[5].i = arg; -} -static inline char** simcall_process_create__get__argv(smx_simcall_t simcall) { - return (char**) simcall->args[6].dp; -} -static inline void simcall_process_create__set__argv(smx_simcall_t simcall, void* arg) { - simcall->args[6].dp = arg; -} -static inline xbt_dict_t simcall_process_create__get__properties(smx_simcall_t simcall) { - return (xbt_dict_t) simcall->args[7].dp; -} -static inline void simcall_process_create__set__properties(smx_simcall_t simcall, void* arg) { - simcall->args[7].dp = arg; -} -static inline int simcall_process_create__get__auto_restart(smx_simcall_t simcall) { - return simcall->args[8].i; -} -static inline void simcall_process_create__set__auto_restart(smx_simcall_t simcall, int arg) { - simcall->args[8].i = arg; -} -static inline void* simcall_process_create__get__result(smx_simcall_t simcall){ - return simcall->result.dp; -} -static inline void simcall_process_create__set__result(smx_simcall_t simcall, void* result){ - simcall->result.dp = result; -} - static inline smx_process_t simcall_process_kill__get__process(smx_simcall_t simcall) { return (smx_process_t) simcall->args[0].dp; } @@ -1218,7 +1157,6 @@ XBT_PRIVATE void simcall_HANDLER_vm_resume(smx_simcall_t simcall, sg_host_t ind_ XBT_PRIVATE void simcall_HANDLER_vm_shutdown(smx_simcall_t simcall, sg_host_t ind_vm); XBT_PRIVATE void simcall_HANDLER_vm_save(smx_simcall_t simcall, sg_host_t ind_vm); XBT_PRIVATE void simcall_HANDLER_vm_restore(smx_simcall_t simcall, sg_host_t ind_vm); -XBT_PRIVATE void* simcall_HANDLER_process_create(smx_simcall_t simcall, const char* name, xbt_main_func_t code, void* data, const char* hostname, double kill_time, int argc, char** argv, xbt_dict_t properties, int auto_restart); XBT_PRIVATE void simcall_HANDLER_process_kill(smx_simcall_t simcall, smx_process_t process); XBT_PRIVATE void simcall_HANDLER_process_killall(smx_simcall_t simcall, int reset_pid); XBT_PRIVATE void simcall_HANDLER_process_suspend(smx_simcall_t simcall, smx_process_t process); diff --git a/src/simix/popping_bodies.cpp b/src/simix/popping_bodies.cpp index 8f88cb1dbe..9494181442 100644 --- a/src/simix/popping_bodies.cpp +++ b/src/simix/popping_bodies.cpp @@ -124,35 +124,6 @@ inline static void simcall_BODY_vm_restore(sg_host_t ind_vm) { } -inline static void* simcall_BODY_process_create(const char* name, xbt_main_func_t code, void* data, const char* hostname, double kill_time, int argc, char** argv, xbt_dict_t properties, int auto_restart) { - smx_process_t self = SIMIX_process_self(); - - /* Go to that function to follow the code flow through the simcall barrier */ - if (0) simcall_HANDLER_process_create(&self->simcall, name, code, data, hostname, kill_time, argc, argv, properties, auto_restart); - /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */ - - self->simcall.call = SIMCALL_PROCESS_CREATE; - memset(&self->simcall.result, 0, sizeof(self->simcall.result)); - memset(self->simcall.args, 0, sizeof(self->simcall.args)); - self->simcall.args[0].cc = (const char*) name; - self->simcall.args[1].fp = (FPtr) code; - self->simcall.args[2].dp = (void*) data; - self->simcall.args[3].cc = (const char*) hostname; - self->simcall.args[4].d = (double) kill_time; - self->simcall.args[5].i = (int) argc; - self->simcall.args[6].dp = (void*) argv; - self->simcall.args[7].dp = (void*) properties; - self->simcall.args[8].i = (int) auto_restart; - if (self != simix_global->maestro_process) { - XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name.c_str(), - SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call); - SIMIX_process_yield(self); - } else { - SIMIX_simcall_handle(&self->simcall, 0); - } - return (void*) self->simcall.result.dp; - } - inline static void simcall_BODY_process_kill(smx_process_t process) { smx_process_t self = SIMIX_process_self(); diff --git a/src/simix/popping_enum.h b/src/simix/popping_enum.h index 5185e8e705..f7590f898d 100644 --- a/src/simix/popping_enum.h +++ b/src/simix/popping_enum.h @@ -23,7 +23,6 @@ typedef enum { SIMCALL_VM_SHUTDOWN, SIMCALL_VM_SAVE, SIMCALL_VM_RESTORE, - SIMCALL_PROCESS_CREATE, SIMCALL_PROCESS_KILL, SIMCALL_PROCESS_KILLALL, SIMCALL_PROCESS_CLEANUP, diff --git a/src/simix/popping_generated.cpp b/src/simix/popping_generated.cpp index 806eb320a0..a46f11e9f8 100644 --- a/src/simix/popping_generated.cpp +++ b/src/simix/popping_generated.cpp @@ -28,7 +28,6 @@ const char* simcall_names[] = { "SIMCALL_VM_SHUTDOWN", "SIMCALL_VM_SAVE", "SIMCALL_VM_RESTORE", - "SIMCALL_PROCESS_CREATE", "SIMCALL_PROCESS_KILL", "SIMCALL_PROCESS_KILLALL", "SIMCALL_PROCESS_CLEANUP", @@ -129,11 +128,6 @@ case SIMCALL_VM_RESTORE: SIMIX_simcall_answer(simcall); break; -case SIMCALL_PROCESS_CREATE: - simcall->result.dp = simcall_HANDLER_process_create(simcall , simcall->args[0].cc, (xbt_main_func_t) simcall->args[1].fp, simcall->args[2].dp, simcall->args[3].cc, simcall->args[4].d, simcall->args[5].i, (char**) simcall->args[6].dp, (xbt_dict_t) simcall->args[7].dp, simcall->args[8].i); - SIMIX_simcall_answer(simcall); - break; - case SIMCALL_PROCESS_KILL: simcall_HANDLER_process_kill(simcall , (smx_process_t) simcall->args[0].dp); SIMIX_simcall_answer(simcall); diff --git a/src/simix/simcalls.in b/src/simix/simcalls.in index e867deba46..e08a38dfbb 100644 --- a/src/simix/simcalls.in +++ b/src/simix/simcalls.in @@ -52,7 +52,6 @@ Proc H vm_shutdown (void) (ind_vm, void*, sg_host_t) Proc H vm_save (void) (ind_vm, void*, sg_host_t) Proc H vm_restore (void) (ind_vm, void*, sg_host_t) -Func H process_create (void*) (name, const char*) (code, FPtr, xbt_main_func_t) (data, void*) (hostname, const char*) (kill_time, double) (argc, int) (argv, void*, char**) (properties, void*, xbt_dict_t) (auto_restart, int) Proc H process_kill (void) (process, void*, smx_process_t) Proc H process_killall (void) (reset_pid, int) Proc - process_cleanup (void) (process, void*, smx_process_t)