From b6dde5ff6f208b83545a4b4e9e81712d0d8617a1 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Tue, 4 Feb 2020 11:36:56 +0100 Subject: [PATCH] Fix mess between smx_activity_t and ActivityImplPtr. The former hides a raw pointer, while the latter is a boost::intrusive_ptr. --- include/simgrid/forward.h | 4 +- include/simgrid/s4u/Mailbox.hpp | 3 +- include/simgrid/simix.h | 78 +++++++++++++++++++++--------- src/kernel/activity/CommImpl.cpp | 19 ++++---- src/s4u/s4u_Actor.cpp | 4 +- src/s4u/s4u_Comm.cpp | 4 +- src/s4u/s4u_Exec.cpp | 4 +- src/s4u/s4u_Io.cpp | 4 +- src/s4u/s4u_Mailbox.cpp | 3 +- src/simix/libsmx.cpp | 67 +++++++++++++------------ src/smpi/include/smpi_request.hpp | 2 +- src/smpi/internals/smpi_global.cpp | 2 +- src/smpi/mpi/smpi_request.cpp | 10 ++-- 13 files changed, 122 insertions(+), 82 deletions(-) diff --git a/include/simgrid/forward.h b/include/simgrid/forward.h index 90efce0223..7ee6e4f83a 100644 --- a/include/simgrid/forward.h +++ b/include/simgrid/forward.h @@ -202,10 +202,10 @@ typedef simgrid::s4u::Disk s4u_Disk; typedef simgrid::s4u::Storage s4u_Storage; typedef simgrid::s4u::NetZone s4u_NetZone; typedef simgrid::s4u::VirtualMachine s4u_VM; -typedef boost::intrusive_ptr smx_activity_t; typedef simgrid::simix::Timer* smx_timer_t; typedef simgrid::kernel::actor::ActorImpl* smx_actor_t; +typedef simgrid::kernel::activity::ActivityImpl* smx_activity_t; typedef simgrid::kernel::activity::ConditionVariableImpl* smx_cond_t; typedef simgrid::kernel::activity::MailboxImpl* smx_mailbox_t; typedef simgrid::kernel::activity::MutexImpl* smx_mutex_t; @@ -227,11 +227,11 @@ typedef struct s4u_Disk s4u_Disk; typedef struct s4u_Storage s4u_Storage; typedef struct s4u_NetZone s4u_NetZone; typedef struct s4u_VM s4u_VM; -typedef struct kernel_Activity* smx_activity_t; typedef enum kernel_activity_state e_smx_state_t; typedef struct s_smx_timer* smx_timer_t; typedef struct s_smx_actor* smx_actor_t; +typedef struct s_smx_activity* smx_activity_t; typedef struct s_smx_cond_t* smx_cond_t; typedef struct s_smx_mailbox* smx_mailbox_t; typedef struct s_smx_mutex* smx_mutex_t; diff --git a/include/simgrid/s4u/Mailbox.hpp b/include/simgrid/s4u/Mailbox.hpp index 372b730eca..5c02b70061 100644 --- a/include/simgrid/s4u/Mailbox.hpp +++ b/include/simgrid/s4u/Mailbox.hpp @@ -81,7 +81,8 @@ public: /** Creates and start a data transmission to that mailbox */ CommPtr put_async(void* data, uint64_t simulated_size_in_bytes); - smx_activity_t iprobe(int type, bool (*match_fun)(void*, void*, kernel::activity::CommImpl*), void* data); + kernel::activity::ActivityImplPtr iprobe(int type, bool (*match_fun)(void*, void*, kernel::activity::CommImpl*), + void* data); /** Blocking data transmission */ void put(void* payload, uint64_t simulated_size_in_bytes); /** Blocking data transmission with timeout */ diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index abc0aed613..1740dd5932 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -114,10 +114,21 @@ XBT_PUBLIC void SIMIX_comm_copy_buffer_callback(simgrid::kernel::activity::CommI /******************************* Host simcalls ********************************/ #ifdef __cplusplus -XBT_PUBLIC e_smx_state_t simcall_execution_wait(const smx_activity_t& execution, double timeout); +XBT_PUBLIC e_smx_state_t simcall_execution_wait(simgrid::kernel::activity::ActivityImpl* execution, double timeout); XBT_PUBLIC unsigned int simcall_execution_waitany_for(simgrid::kernel::activity::ExecImpl* execs[], size_t count, double timeout); -XBT_PUBLIC bool simcall_execution_test(const smx_activity_t& execution); +XBT_PUBLIC bool simcall_execution_test(simgrid::kernel::activity::ActivityImpl* execution); + +XBT_ATTRIB_DEPRECATED_v330("Please use an ActivityImpl* for first parameter") inline e_smx_state_t + simcall_execution_wait(const simgrid::kernel::activity::ActivityImplPtr& execution, double timeout) +{ + return simcall_execution_wait(execution.get(), timeout); +} +XBT_ATTRIB_DEPRECATED_v330("Please use an ActivityImpl* for first parameter") inline bool simcall_execution_test( + const simgrid::kernel::activity::ActivityImplPtr& execution) +{ + return simcall_execution_test(execution.get()); +} #endif /**************************** Process simcalls ********************************/ @@ -142,36 +153,47 @@ XBT_PUBLIC void simcall_comm_send(smx_actor_t sender, smx_mailbox_t mbox, double void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double timeout); -XBT_PUBLIC smx_activity_t 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_PUBLIC 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_PUBLIC void simcall_comm_recv(smx_actor_t receiver, smx_mailbox_t 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_PUBLIC smx_activity_t simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t 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_PUBLIC simgrid::kernel::activity::ActivityImplPtr +simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t 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_PUBLIC smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, - bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), - void* data); +XBT_PUBLIC simgrid::kernel::activity::ActivityImplPtr +simcall_comm_iprobe(smx_mailbox_t mbox, int type, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), + void* data); /* FIXME: waitany is going to be a vararg function, and should take a timeout */ -XBT_PUBLIC unsigned int simcall_comm_waitany(smx_activity_t comms[], size_t count, double timeout); +XBT_ATTRIB_DEPRECATED_v330("Please use a CommImpl*[] for first parameter") XBT_PUBLIC + unsigned int simcall_comm_waitany(simgrid::kernel::activity::ActivityImplPtr comms[], size_t count, double timeout); XBT_PUBLIC unsigned int simcall_comm_waitany(simgrid::kernel::activity::CommImpl* comms[], size_t count, double timeout); -XBT_PUBLIC void simcall_comm_wait(const smx_activity_t& comm, double timeout); -XBT_PUBLIC bool simcall_comm_test(const smx_activity_t& comm); -XBT_PUBLIC int simcall_comm_testany(smx_activity_t comms[], size_t count); +XBT_PUBLIC void simcall_comm_wait(simgrid::kernel::activity::ActivityImpl* comm, double timeout); +XBT_PUBLIC bool simcall_comm_test(simgrid::kernel::activity::ActivityImpl* comm); +XBT_ATTRIB_DEPRECATED_v330("Please use a CommImpl*[] for first parameter") XBT_PUBLIC + int simcall_comm_testany(simgrid::kernel::activity::ActivityImplPtr comms[], size_t count); XBT_PUBLIC int simcall_comm_testany(simgrid::kernel::activity::CommImpl* comms[], size_t count); + +XBT_ATTRIB_DEPRECATED_v330("Please use a ActivityImpl* for first parameter") inline void simcall_comm_wait( + const simgrid::kernel::activity::ActivityImplPtr& comm, double timeout) +{ + simcall_comm_wait(comm.get(), timeout); +} +XBT_ATTRIB_DEPRECATED_v330("Please use a ActivityImpl* for first parameter") inline bool simcall_comm_test( + const simgrid::kernel::activity::ActivityImplPtr& comm) +{ + return simcall_comm_test(comm.get()); +} #endif /************************** Synchro simcalls **********************************/ @@ -191,8 +213,20 @@ SG_END_DECL /***************************** Io **************************************/ #ifdef __cplusplus -XBT_PUBLIC e_smx_state_t simcall_io_wait(const smx_activity_t& io, double timeout); -XBT_PUBLIC bool simcall_io_test(const smx_activity_t& io); +XBT_PUBLIC e_smx_state_t simcall_io_wait(simgrid::kernel::activity::ActivityImpl* io, double timeout); +XBT_PUBLIC bool simcall_io_test(simgrid::kernel::activity::ActivityImpl* io); + +XBT_ATTRIB_DEPRECATED_v330("Please use an ActivityImpl* for first parameter") inline e_smx_state_t + simcall_io_wait(const simgrid::kernel::activity::ActivityImplPtr& io, double timeout) +{ + return simcall_io_wait(io.get(), timeout); +} +XBT_ATTRIB_DEPRECATED_v330("Please use an ActivityImpl* for first parameter") inline bool simcall_io_test( + const simgrid::kernel::activity::ActivityImplPtr& io) +{ + return simcall_io_test(io.get()); +} + #endif /************************** MC simcalls **********************************/ SG_BEGIN_DECL diff --git a/src/kernel/activity/CommImpl.cpp b/src/kernel/activity/CommImpl.cpp index b80dc64481..3d72d9f710 100644 --- a/src/kernel/activity/CommImpl.cpp +++ b/src/kernel/activity/CommImpl.cpp @@ -24,13 +24,13 @@ XBT_PRIVATE void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_actor_t sr void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double timeout) { - smx_activity_t comm = simcall_HANDLER_comm_isend(simcall, src, mbox, task_size, rate, src_buff, src_buff_size, - match_fun, nullptr, copy_data_fun, data, 0); + simgrid::kernel::activity::ActivityImplPtr comm = simcall_HANDLER_comm_isend( + simcall, src, mbox, task_size, rate, src_buff, src_buff_size, match_fun, nullptr, copy_data_fun, data, 0); SIMCALL_SET_MC_VALUE(*simcall, 0); simcall_HANDLER_comm_wait(simcall, static_cast(comm.get()), timeout); } -XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend( +XBT_PRIVATE simgrid::kernel::activity::ActivityImplPtr simcall_HANDLER_comm_isend( smx_simcall_t /*simcall*/, smx_actor_t src_proc, smx_mailbox_t mbox, double task_size, double rate, unsigned char* src_buff, size_t src_buff_size, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), @@ -103,16 +103,17 @@ XBT_PRIVATE void simcall_HANDLER_comm_recv(smx_simcall_t simcall, smx_actor_t re void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double timeout, double rate) { - smx_activity_t comm = simcall_HANDLER_comm_irecv(simcall, receiver, mbox, dst_buff, dst_buff_size, match_fun, - copy_data_fun, data, rate); + simgrid::kernel::activity::ActivityImplPtr comm = simcall_HANDLER_comm_irecv( + simcall, receiver, mbox, dst_buff, dst_buff_size, match_fun, copy_data_fun, data, rate); SIMCALL_SET_MC_VALUE(*simcall, 0); simcall_HANDLER_comm_wait(simcall, static_cast(comm.get()), timeout); } -XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_irecv( - smx_simcall_t /*simcall*/, smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* 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_PRIVATE simgrid::kernel::activity::ActivityImplPtr +simcall_HANDLER_comm_irecv(smx_simcall_t /*simcall*/, smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* 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) { simgrid::kernel::activity::CommImplPtr this_synchro = simgrid::kernel::activity::CommImplPtr(new simgrid::kernel::activity::CommImpl()); diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index ca0df728fc..02f2ba7bb6 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -106,7 +106,7 @@ void Actor::join(double timeout) // The joined process is already finished, just wake up the issuer right away issuer->simcall_answer(); } else { - smx_activity_t sync = issuer->join(target, timeout); + kernel::activity::ActivityImplPtr sync = issuer->join(target, timeout); sync->register_simcall(&issuer->simcall); } }); @@ -315,7 +315,7 @@ void sleep_for(double duration) issuer->simcall_answer(); return; } - smx_activity_t sync = issuer->sleep(duration); + kernel::activity::ActivityImplPtr sync = issuer->sleep(duration); sync->register_simcall(&issuer->simcall); }); diff --git a/src/s4u/s4u_Comm.cpp b/src/s4u/s4u_Comm.cpp index 49edc9fb22..fdaf3bcbda 100644 --- a/src/s4u/s4u_Comm.cpp +++ b/src/s4u/s4u_Comm.cpp @@ -177,7 +177,7 @@ Comm* Comm::wait_for(double timeout) break; case State::STARTED: - simcall_comm_wait(pimpl_, timeout); + simcall_comm_wait(get_impl(), timeout); on_completion(*Actor::self()); state_ = State::FINISHED; this->release_dependencies(); @@ -233,7 +233,7 @@ bool Comm::test() if (state_ == State::INITED || state_ == State::STARTING) this->vetoable_start(); - if (simcall_comm_test(pimpl_)) { + if (simcall_comm_test(get_impl())) { state_ = State::FINISHED; this->release_dependencies(); return true; diff --git a/src/s4u/s4u_Exec.cpp b/src/s4u/s4u_Exec.cpp index 9c75bcad98..64ee26d95b 100644 --- a/src/s4u/s4u_Exec.cpp +++ b/src/s4u/s4u_Exec.cpp @@ -31,7 +31,7 @@ bool Exec::test() if (state_ == State::INITED || state_ == State::STARTING) this->vetoable_start(); - if (simcall_execution_test(pimpl_)) { + if (simcall_execution_test(get_impl())) { state_ = State::FINISHED; this->release_dependencies(); return true; @@ -49,7 +49,7 @@ Exec* Exec::wait_for(double timeout) { if (state_ == State::INITED) vetoable_start(); - simcall_execution_wait(pimpl_, timeout); + simcall_execution_wait(get_impl(), timeout); state_ = State::FINISHED; on_completion(*Actor::self(), *this); this->release_dependencies(); diff --git a/src/s4u/s4u_Io.cpp b/src/s4u/s4u_Io.cpp index be9a3ad1bf..68adbec381 100644 --- a/src/s4u/s4u_Io.cpp +++ b/src/s4u/s4u_Io.cpp @@ -63,7 +63,7 @@ Io* Io::wait_for(double timeout) { if (state_ == State::INITED) vetoable_start(); - simcall_io_wait(pimpl_, timeout); + simcall_io_wait(get_impl(), timeout); state_ = State::FINISHED; this->release_dependencies(); return this; @@ -80,7 +80,7 @@ bool Io::test() if (state_ == State::INITED || state_ == State::STARTING) this->vetoable_start(); - if (simcall_io_test(pimpl_)) { + if (simcall_io_test(get_impl())) { state_ = State::FINISHED; this->release_dependencies(); return true; diff --git a/src/s4u/s4u_Mailbox.cpp b/src/s4u/s4u_Mailbox.cpp index d153c08080..e7fb05d6b7 100644 --- a/src/s4u/s4u_Mailbox.cpp +++ b/src/s4u/s4u_Mailbox.cpp @@ -153,7 +153,8 @@ void* Mailbox::get(double timeout) return res; } -smx_activity_t Mailbox::iprobe(int type, bool (*match_fun)(void*, void*, kernel::activity::CommImpl*), void* data) +kernel::activity::ActivityImplPtr +Mailbox::iprobe(int type, bool (*match_fun)(void*, void*, kernel::activity::CommImpl*), void* data) { return kernel::actor::simcall([this, type, match_fun, data] { return pimpl_->iprobe(type, match_fun, data); }); } diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 226cd5f036..2a16bc5db0 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -29,15 +29,15 @@ * * @param execution The execution synchro */ -e_smx_state_t simcall_execution_wait(const smx_activity_t& execution, double timeout) +e_smx_state_t simcall_execution_wait(simgrid::kernel::activity::ActivityImpl* execution, double timeout) { - return (e_smx_state_t)simcall_BODY_execution_wait(static_cast(execution.get()), + return (e_smx_state_t)simcall_BODY_execution_wait(static_cast(execution), timeout); } -bool simcall_execution_test(const smx_activity_t& execution) +bool simcall_execution_test(simgrid::kernel::activity::ActivityImpl* execution) { - return simcall_BODY_execution_test(static_cast(execution.get())); + return simcall_BODY_execution_test(static_cast(execution)); } unsigned int simcall_execution_waitany_for(simgrid::kernel::activity::ExecImpl* execs[], size_t count, double timeout) @@ -78,10 +78,11 @@ void simcall_comm_send(smx_actor_t sender, smx_mailbox_t mbox, double task_size, if (MC_is_active() || MC_record_replay_is_active()) { /* the model-checker wants two separate simcalls */ - smx_activity_t comm = nullptr; /* MC needs the comm to be set to nullptr during the simcall */ + simgrid::kernel::activity::ActivityImplPtr comm = + nullptr; /* MC needs the comm to be set to nullptr during the simcall */ comm = simcall_comm_isend(sender, mbox, task_size, rate, src_buff, src_buff_size, match_fun, nullptr, copy_data_fun, data, 0); - simcall_comm_wait(comm, timeout); + simcall_comm_wait(comm.get(), timeout); comm = nullptr; } else { @@ -93,12 +94,11 @@ void simcall_comm_send(smx_actor_t sender, smx_mailbox_t mbox, double task_size, /** * @ingroup simix_comm_management */ -smx_activity_t 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) +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) { /* checking for infinite values */ xbt_assert(std::isfinite(task_size), "task_size is not finite!"); @@ -123,10 +123,11 @@ void simcall_comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff, if (MC_is_active() || MC_record_replay_is_active()) { /* the model-checker wants two separate simcalls */ - smx_activity_t comm = nullptr; /* MC needs the comm to be set to nullptr during the simcall */ + simgrid::kernel::activity::ActivityImplPtr comm = + nullptr; /* MC needs the comm to be set to nullptr during the simcall */ comm = simcall_comm_irecv(receiver, mbox, dst_buff, dst_buff_size, match_fun, copy_data_fun, data, rate); - simcall_comm_wait(comm, timeout); + simcall_comm_wait(comm.get(), timeout); comm = nullptr; } else { @@ -137,10 +138,10 @@ void simcall_comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff, /** * @ingroup simix_comm_management */ -smx_activity_t simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t 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) +simgrid::kernel::activity::ActivityImplPtr +simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t 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_assert(mbox, "No rendez-vous point defined for irecv"); @@ -151,8 +152,9 @@ smx_activity_t simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t mbox, void /** * @ingroup simix_comm_management */ -smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, - bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), void* data) +simgrid::kernel::activity::ActivityImplPtr +simcall_comm_iprobe(smx_mailbox_t mbox, int type, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), + void* data) { xbt_assert(mbox, "No rendez-vous point defined for iprobe"); @@ -162,10 +164,11 @@ smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, /** * @ingroup simix_comm_management */ -unsigned int simcall_comm_waitany(smx_activity_t comms[], size_t count, double timeout) +unsigned int simcall_comm_waitany(simgrid::kernel::activity::ActivityImplPtr comms[], size_t count, + double timeout) // XBT_ATTRIB_DEPRECATED_v330 { std::unique_ptr rcomms(new simgrid::kernel::activity::CommImpl*[count]); - std::transform(comms, comms + count, rcomms.get(), [](const smx_activity_t& comm) { + std::transform(comms, comms + count, rcomms.get(), [](const simgrid::kernel::activity::ActivityImplPtr& comm) { return static_cast(comm.get()); }); return simcall_BODY_comm_waitany(rcomms.get(), count, timeout); @@ -179,12 +182,12 @@ unsigned int simcall_comm_waitany(simgrid::kernel::activity::CommImpl* comms[], /** * @ingroup simix_comm_management */ -int simcall_comm_testany(smx_activity_t comms[], size_t count) +int simcall_comm_testany(simgrid::kernel::activity::ActivityImplPtr comms[], size_t count) // XBT_ATTRIB_DEPRECATED_v330 { if (count == 0) return -1; std::unique_ptr rcomms(new simgrid::kernel::activity::CommImpl*[count]); - std::transform(comms, comms + count, rcomms.get(), [](const smx_activity_t& comm) { + std::transform(comms, comms + count, rcomms.get(), [](const simgrid::kernel::activity::ActivityImplPtr& comm) { return static_cast(comm.get()); }); return simcall_BODY_comm_testany(rcomms.get(), count); @@ -200,19 +203,19 @@ int simcall_comm_testany(simgrid::kernel::activity::CommImpl* comms[], size_t co /** * @ingroup simix_comm_management */ -void simcall_comm_wait(const smx_activity_t& comm, double timeout) +void simcall_comm_wait(simgrid::kernel::activity::ActivityImpl* comm, double timeout) { xbt_assert(std::isfinite(timeout), "timeout is not finite!"); - simcall_BODY_comm_wait(static_cast(comm.get()), timeout); + simcall_BODY_comm_wait(static_cast(comm), timeout); } /** * @ingroup simix_comm_management * */ -bool simcall_comm_test(const smx_activity_t& comm) +bool simcall_comm_test(simgrid::kernel::activity::ActivityImpl* comm) { - return simcall_BODY_comm_test(static_cast(comm.get())); + return simcall_BODY_comm_test(static_cast(comm)); } /** @@ -303,14 +306,14 @@ int simcall_sem_acquire_timeout(smx_sem_t sem, double timeout) return simcall_BODY_sem_acquire_timeout(sem, timeout); } -e_smx_state_t simcall_io_wait(const smx_activity_t& io, double timeout) +e_smx_state_t simcall_io_wait(simgrid::kernel::activity::ActivityImpl* io, double timeout) { - return (e_smx_state_t)simcall_BODY_io_wait(static_cast(io.get()), timeout); + return (e_smx_state_t)simcall_BODY_io_wait(static_cast(io), timeout); } -bool simcall_io_test(const smx_activity_t& io) +bool simcall_io_test(simgrid::kernel::activity::ActivityImpl* io) { - return simcall_BODY_io_test(static_cast(io.get())); + return simcall_BODY_io_test(static_cast(io)); } void simcall_run_kernel(std::function const& code, simgrid::mc::SimcallInspector* t) diff --git a/src/smpi/include/smpi_request.hpp b/src/smpi/include/smpi_request.hpp index 902a8921c9..7196af7eb1 100644 --- a/src/smpi/include/smpi_request.hpp +++ b/src/smpi/include/smpi_request.hpp @@ -41,7 +41,7 @@ class Request : public F2C { bool truncated_; size_t real_size_; MPI_Comm comm_; - smx_activity_t action_; + simgrid::kernel::activity::ActivityImplPtr action_; unsigned flags_; bool detached_; MPI_Request detached_sender_; diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 9a4bd791e1..b768c45de9 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -128,7 +128,7 @@ void smpi_comm_set_copy_data_callback(void (*callback) (smx_activity_t, void*, s static void (*saved_callback)(smx_activity_t, void*, size_t); saved_callback = callback; smpi_comm_copy_data_callback = [](simgrid::kernel::activity::CommImpl* comm, void* buff, size_t size) { - saved_callback(smx_activity_t(comm), buff, size); + saved_callback(comm, buff, size); }; } diff --git a/src/smpi/mpi/smpi_request.cpp b/src/smpi/mpi/smpi_request.cpp index 6a8ac60b4c..90d7485744 100644 --- a/src/smpi/mpi/smpi_request.cpp +++ b/src/smpi/mpi/smpi_request.cpp @@ -376,7 +376,7 @@ void Request::start() mailbox = process->mailbox_small(); XBT_DEBUG("Is there a corresponding send already posted in the small mailbox %s (in case of SSEND)?", mailbox->get_cname()); - smx_activity_t action = mailbox->iprobe(0, &match_recv, static_cast(this)); + simgrid::kernel::activity::ActivityImplPtr action = mailbox->iprobe(0, &match_recv, static_cast(this)); if (action == nullptr) { mailbox = process->mailbox(); @@ -392,7 +392,7 @@ void Request::start() } else { mailbox = process->mailbox_small(); XBT_DEBUG("Is there a corresponding send already posted the small mailbox?"); - smx_activity_t action = mailbox->iprobe(0, &match_recv, static_cast(this)); + simgrid::kernel::activity::ActivityImplPtr action = mailbox->iprobe(0, &match_recv, static_cast(this)); if (action == nullptr) { XBT_DEBUG("No, nothing in the permanent receive mailbox"); @@ -470,7 +470,7 @@ void Request::start() } else if (((flags_ & MPI_REQ_RMA) != 0) || static_cast(size_) < smpi_cfg_async_small_thresh()) { // eager mode mailbox = process->mailbox(); XBT_DEBUG("Is there a corresponding recv already posted in the large mailbox %s?", mailbox->get_cname()); - smx_activity_t action = mailbox->iprobe(1, &match_send, static_cast(this)); + simgrid::kernel::activity::ActivityImplPtr action = mailbox->iprobe(1, &match_send, static_cast(this)); if (action == nullptr) { if ((flags_ & MPI_REQ_SSEND) == 0) { mailbox = process->mailbox_small(); @@ -562,7 +562,7 @@ int Request::test(MPI_Request * request, MPI_Status * status, int* flag) { if (((*request)->flags_ & MPI_REQ_PREPARED) == 0) { if ((*request)->action_ != nullptr && (*request)->cancelled_ != 1){ try{ - *flag = simcall_comm_test((*request)->action_); + *flag = simcall_comm_test((*request)->action_.get()); } catch (const Exception&) { *flag = 0; return ret; @@ -917,7 +917,7 @@ int Request::wait(MPI_Request * request, MPI_Status * status) if ((*request)->action_ != nullptr){ try{ // this is not a detached send - simcall_comm_wait((*request)->action_, -1.0); + simcall_comm_wait((*request)->action_.get(), -1.0); } catch (const Exception&) { XBT_VERB("Request cancelled"); } -- 2.20.1