X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/596294ab8f7a06cf75114739b574a013b60bb368..d1f1e22acb2e2342b535c3847e804b4a5fee3167:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index bf6e99b049..794909f9e5 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -15,13 +15,16 @@ #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/smx_private.hpp" + +#include "src/simix/SynchroComm.hpp" #include @@ -32,7 +35,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 { @@ -40,57 +43,7 @@ void simcall_call(smx_process_t process) } } -// ***** Host simcalls -// Those functions are replaced by methods on the Host object. - -/** \ingroup simix_host_management - * \deprecated */ -xbt_swag_t simcall_host_get_process_list(sg_host_t host) -{ - return host->processes(); -} - -/** \ingroup simix_host_management - * \deprecated */ -double simcall_host_get_current_power_peak(sg_host_t host) -{ - return host->currentPowerPeak(); -} - -/** \ingroup simix_host_management - * \deprecated */ -double simcall_host_get_power_peak_at(sg_host_t host, int pstate_index) -{ - return host->powerPeakAt(pstate_index); -} - -/** \deprecated */ -void simcall_host_get_params(sg_host_t vm, vm_params_t params) -{ - vm->parameters(params); -} - -/** \deprecated */ -void simcall_host_set_params(sg_host_t vm, vm_params_t params) -{ - vm->setParameters(params); -} - -/** \ingroup simix_storage_management - * \deprecated */ -xbt_dict_t simcall_host_get_mounted_storage_list(sg_host_t host) -{ - return host->mountedStoragesAsDict(); -} - -/** \ingroup simix_storage_management - * \deprecated */ -xbt_dynar_t simcall_host_get_attached_storage_list(sg_host_t host) -{ - return host->attachedStorages(); -} - -// ***** Other simcalls +// ***** AS simcalls /** * \ingroup simix_host_management @@ -174,18 +127,6 @@ smx_synchro_t simcall_execution_parallel_start(const char *name, } -/** - * \ingroup simix_process_management - * \brief Destroys an execution synchro. - * - * Destroys a synchro, freeing its memory. This function cannot be called if there are a conditional waiting for it. - * \param execution The execution synchro to destroy - */ -void simcall_execution_destroy(smx_synchro_t execution) -{ - simcall_BODY_execution_destroy(execution); -} - /** * \ingroup simix_process_management * \brief Cancels an execution synchro. @@ -198,30 +139,6 @@ void simcall_execution_cancel(smx_synchro_t execution) simcall_BODY_execution_cancel(execution); } -/** - * \ingroup simix_process_management - * \brief Returns how much of an execution synchro remains to be done. - * - * \param execution The execution synchro - * \return The remaining amount - */ -double simcall_execution_get_remains(smx_synchro_t execution) -{ - return simcall_BODY_execution_get_remains(execution); -} - -/** - * \ingroup simix_process_management - * \brief Returns the state of an execution synchro. - * - * \param execution The execution synchro - * \return The state - */ -e_smx_state_t simcall_execution_get_state(smx_synchro_t execution) -{ - return simcall_BODY_execution_get_state(execution); -} - /** * \ingroup simix_process_management * \brief Changes the priority of an execution synchro. @@ -460,9 +377,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::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; } /** @@ -603,11 +527,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(void* arg) -{ - simix_global->kill_process_function((smx_process_t) arg); -} - /** * \ingroup simix_process_management * \brief Set the kill time of a process. @@ -615,13 +534,14 @@ static void kill_process(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, 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 @@ -751,28 +671,16 @@ smx_mailbox_t simcall_mbox_get_by_name(const char *name) return SIMIX_mbox_get_by_name(name); } -/** - * \ingroup simix_mbox_management - * \brief Counts the number of communication synchros of a given host pending - * on a rendez-vous point. - * \param mbox The rendez-vous point - * \param host The host to be counted - * \return The number of comm synchros pending in the mbox - */ -int simcall_mbox_comm_count_by_host(smx_mailbox_t mbox, sg_host_t host) -{ - return simcall_BODY_mbox_comm_count_by_host(mbox, host); -} - /** * \ingroup simix_mbox_management * \brief returns the communication at the head of the rendez-vous * \param mbox The rendez-vous point * \return The communication or NULL if empty */ -smx_synchro_t simcall_mbox_get_head(smx_mailbox_t mbox) +smx_synchro_t simcall_mbox_front(smx_mailbox_t mbox) { - return simcall_BODY_mbox_get_head(mbox); + + return mbox->comm_queue->empty()? nullptr:mbox->comm_queue->front(); } void simcall_mbox_set_receiver(smx_mailbox_t mbox, smx_process_t process) @@ -780,11 +688,6 @@ void simcall_mbox_set_receiver(smx_mailbox_t mbox, smx_process_t process) simcall_BODY_mbox_set_receiver(mbox, process); } -smx_process_t simcall_mbox_get_receiver(smx_mailbox_t mbox) -{ - return simcall_BODY_mbox_get_receiver(mbox); -} - /** * \ingroup simix_comm_management */ @@ -889,9 +792,12 @@ smx_synchro_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, int src, int tag /** * \ingroup simix_comm_management */ -void simcall_comm_cancel(smx_synchro_t comm) +void simcall_comm_cancel(smx_synchro_t synchro) { - simcall_BODY_comm_cancel(comm); + simgrid::simix::kernel([synchro]{ + simgrid::simix::Comm *comm = static_cast(synchro); + comm->cancel(); + }); } /** @@ -945,60 +851,6 @@ int simcall_comm_test(smx_synchro_t comm) return simcall_BODY_comm_test(comm); } -/** - * \ingroup simix_comm_management - * - */ -double simcall_comm_get_remains(smx_synchro_t comm) -{ - return simcall_BODY_comm_get_remains(comm); -} - -/** - * \ingroup simix_comm_management - * - */ -e_smx_state_t simcall_comm_get_state(smx_synchro_t comm) -{ - return simcall_BODY_comm_get_state(comm); -} - -/** - * \ingroup simix_comm_management - * - */ -void *simcall_comm_get_src_data(smx_synchro_t comm) -{ - return simcall_BODY_comm_get_src_data(comm); -} - -/** - * \ingroup simix_comm_management - * - */ -void *simcall_comm_get_dst_data(smx_synchro_t comm) -{ - return simcall_BODY_comm_get_dst_data(comm); -} - -/** - * \ingroup simix_comm_management - * - */ -smx_process_t simcall_comm_get_src_proc(smx_synchro_t comm) -{ - return simcall_BODY_comm_get_src_proc(comm); -} - -/** - * \ingroup simix_comm_management - * - */ -smx_process_t simcall_comm_get_dst_proc(smx_synchro_t comm) -{ - return simcall_BODY_comm_get_dst_proc(comm); -} - /** * \ingroup simix_synchro_management * @@ -1276,7 +1128,7 @@ xbt_dict_t simcall_storage_get_content(smx_storage_t storage) void simcall_run_kernel(std::function const& code) { - return simcall_BODY_run_kernel((void*) &code); + return simcall_BODY_run_kernel(&code); } int simcall_mc_random(int min, int max) {