X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a707ad979be7c88d7581f403661c67598d320d55..69659a8281d4aeac3476820299f26a09dd285996:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index e101cffd5b..4a2938abdb 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -18,13 +18,14 @@ #define SIMIX_H_NO_DEPRECATED_WARNING // avoid deprecation warning on include (remove with XBT_ATTRIB_DEPRECATED_v335) #include -XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(ker_simcall); /** * @ingroup simix_comm_management */ -void simcall_comm_send(smx_actor_t sender, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, - size_t src_buff_size, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), +void simcall_comm_send(simgrid::kernel::actor::ActorImpl* sender, simgrid::kernel::activity::MailboxImpl* mbox, + double task_size, double rate, void* src_buff, size_t src_buff_size, + bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double timeout) // XBT_ATTRIB_DEPRECATED_v335 { @@ -37,10 +38,11 @@ void simcall_comm_send(smx_actor_t sender, smx_mailbox_t mbox, double task_size, * @ingroup simix_comm_management */ simgrid::kernel::activity::ActivityImplPtr -simcall_comm_isend(smx_actor_t sender, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, - size_t src_buff_size, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), - void (*clean_fun)(void*), void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), - void* data, bool detached) // XBT_ATTRIB_DEPRECATED_v335 +simcall_comm_isend(simgrid::kernel::actor::ActorImpl* sender, simgrid::kernel::activity::MailboxImpl* mbox, + double task_size, double rate, void* src_buff, size_t src_buff_size, + bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), void (*clean_fun)(void*), + void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, + bool detached) // XBT_ATTRIB_DEPRECATED_v335 { /* checking for infinite values */ xbt_assert(std::isfinite(task_size), "task_size is not finite!"); @@ -58,7 +60,8 @@ simcall_comm_isend(smx_actor_t sender, smx_mailbox_t mbox, double task_size, dou /** * @ingroup simix_comm_management */ -void simcall_comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, +void simcall_comm_recv(simgrid::kernel::actor::ActorImpl* receiver, simgrid::kernel::activity::MailboxImpl* mbox, + void* dst_buff, size_t* dst_buff_size, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double timeout, double rate) // XBT_ATTRIB_DEPRECATED_v335 @@ -72,7 +75,8 @@ void simcall_comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff, * @ingroup simix_comm_management */ simgrid::kernel::activity::ActivityImplPtr -simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, +simcall_comm_irecv(simgrid::kernel::actor::ActorImpl* receiver, simgrid::kernel::activity::MailboxImpl* mbox, + void* dst_buff, size_t* dst_buff_size, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double rate) // XBT_ATTRIB_DEPRECATED_v335 @@ -156,33 +160,32 @@ bool simcall_comm_test(simgrid::kernel::activity::ActivityImpl* comm) // XBT_ATT return false; } -static void simcall(simgrid::simix::Simcall call, std::function const& code) +static void simcall(simgrid::kernel::actor::Simcall::Type call, std::function const& code, + simgrid::kernel::actor::SimcallObserver* observer) { auto self = simgrid::kernel::actor::ActorImpl::self(); self->simcall_.call_ = call; self->simcall_.code_ = &code; - if (not simgrid::kernel::EngineImpl::get_instance()->is_maestro(self)) { - XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_)); - self->yield(); - } else { + self->simcall_.observer_ = observer; + if (simgrid::kernel::EngineImpl::get_instance()->is_maestro(self)) { self->simcall_handle(0); + } else { + XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), self->simcall_.get_cname()); + self->yield(); } + self->simcall_.observer_ = nullptr; } void simcall_run_answered(std::function const& code, simgrid::kernel::actor::SimcallObserver* observer) { - simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = observer; // The function `code` is called in kernel mode (either because we are already in maestor or after a context switch) // and simcall_answer() is called - simcall(simgrid::simix::Simcall::RUN_ANSWERED, code); - simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = nullptr; + simcall(simgrid::kernel::actor::Simcall::Type::RUN_ANSWERED, code, observer); } void simcall_run_blocking(std::function const& code, simgrid::kernel::actor::SimcallObserver* observer) { - simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = observer; // The function `code` is called in kernel mode (either because we are already in maestor or after a context switch) // BUT simcall_answer IS NOT CALLED - simcall(simgrid::simix::Simcall::RUN_BLOCKING, code); - simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = nullptr; + simcall(simgrid::kernel::actor::Simcall::Type::RUN_BLOCKING, code, observer); }