X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1928b36ff7a719c88d3db6b4e685bed8f544c7da..652eb99105d979fcd897c2f26cfbce0f7d81ecd3:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 8e07b0c500..253116df3e 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -17,13 +17,14 @@ #include +#include + #include "src/mc/mc_replay.h" #include "smx_private.h" #include "src/mc/mc_forward.hpp" #include "xbt/ex.h" #include "mc/mc.h" #include "src/simix/smx_host_private.h" - #include "src/simix/SynchroComm.hpp" #include @@ -205,7 +206,7 @@ e_smx_state_t simcall_execution_wait(smx_synchro_t execution) */ void* simcall_vm_create(const char *name, sg_host_t phys_host) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_create, name, phys_host)); + return simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_create, name, phys_host)); } /** @@ -216,7 +217,7 @@ void* simcall_vm_create(const char *name, sg_host_t phys_host) */ void simcall_vm_start(sg_host_t vm) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_start, vm)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_start, vm)); } /** @@ -228,7 +229,7 @@ void simcall_vm_start(sg_host_t vm) */ int simcall_vm_get_state(sg_host_t vm) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_get_state, vm)); + return simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_get_state, vm)); } /** @@ -240,17 +241,17 @@ int simcall_vm_get_state(sg_host_t vm) */ void *simcall_vm_get_pm(sg_host_t vm) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_get_pm, vm)); + return simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_get_pm, vm)); } void simcall_vm_set_bound(sg_host_t vm, double bound) { - simgrid::simix::kernel(std::bind(SIMIX_vm_set_bound, vm, bound)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_set_bound, vm, bound)); } void simcall_vm_set_affinity(sg_host_t vm, sg_host_t pm, unsigned long mask) { - simgrid::simix::kernel(std::bind(SIMIX_vm_set_affinity, vm, pm, mask)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_set_affinity, vm, pm, mask)); } /** @@ -262,7 +263,7 @@ void simcall_vm_set_affinity(sg_host_t vm, sg_host_t pm, unsigned long mask) */ void simcall_vm_migrate(sg_host_t vm, sg_host_t host) { - return simgrid::simix::kernel(std::bind(SIMIX_vm_migrate, vm, host)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_migrate, vm, host)); } /** @@ -328,7 +329,7 @@ void simcall_vm_shutdown(sg_host_t vm) */ void simcall_vm_destroy(sg_host_t vm) { - simgrid::simix::kernel(std::bind(SIMIX_vm_destroy, vm)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_destroy, vm)); } /** @@ -347,48 +348,10 @@ void simcall_vm_destroy(sg_host_t vm) */ void simcall_vm_migratefrom_resumeto(sg_host_t vm, sg_host_t src_pm, sg_host_t dst_pm) { - simgrid::simix::kernel(std::bind( + simgrid::simix::kernelImmediate(std::bind( SIMIX_vm_migratefrom_resumeto, vm, src_pm, dst_pm)); } -/** - * \ingroup simix_process_management - * \brief Creates and runs a new SIMIX process. - * - * The structure and the corresponding thread are created and put in the list of ready processes. - * - * \param name a name for the process. It is for user-level information and can be nullptr. - * \param code the main function of the process - * \param data a pointer to any data one may want to attach to the new object. It is for user-level information and can be nullptr. - * It can be retrieved with the function \ref simcall_process_get_data. - * \param hostname name of the host where the new agent is executed. - * \param kill_time time when the process is killed - * \param argc first argument passed to \a code - * \param argv second argument passed to \a code - * \param properties the properties of the process - * \param auto_restart either it is autorestarting or not. - */ -smx_process_t simcall_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) -{ - if (name == nullptr) - name = ""; - auto wrapped_code = simgrid::xbt::wrapMain(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; -} - /** * \ingroup simix_process_management * \brief Kills a SIMIX process. @@ -478,7 +441,7 @@ void simcall_process_resume(smx_process_t process) */ int simcall_process_count(void) { - return simgrid::simix::kernel(SIMIX_process_count); + return simgrid::simix::kernelImmediate(SIMIX_process_count); } /** @@ -524,7 +487,7 @@ void* simcall_process_get_data(smx_process_t process) */ void simcall_process_set_data(smx_process_t process, void *data) { - simgrid::simix::kernel(std::bind(SIMIX_process_set_data, process, data)); + simgrid::simix::kernelImmediate(std::bind(SIMIX_process_set_data, process, data)); } /** @@ -794,7 +757,7 @@ smx_synchro_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, int src, int tag */ void simcall_comm_cancel(smx_synchro_t synchro) { - simgrid::simix::kernel([synchro]{ + simgrid::simix::kernelImmediate([synchro]{ simgrid::simix::Comm *comm = static_cast(synchro); comm->cancel(); }); @@ -1128,7 +1091,12 @@ xbt_dict_t simcall_storage_get_content(smx_storage_t storage) void simcall_run_kernel(std::function const& code) { - return simcall_BODY_run_kernel(&code); + simcall_BODY_run_kernel(&code); +} + +void simcall_run_blocking(std::function const& code) +{ + simcall_BODY_run_blocking(&code); } int simcall_mc_random(int min, int max) { @@ -1141,3 +1109,15 @@ int simcall_mc_random(int min, int max) { const char *SIMIX_simcall_name(e_smx_simcall_t kind) { return simcall_names[kind]; } + +namespace simgrid { +namespace simix { + +void unblock(smx_process_t process) +{ + xbt_assert(SIMIX_is_maestro()); + SIMIX_simcall_answer(&process->simcall); +} + +} +} \ No newline at end of file