From 60a27a0410114e3ad562913b49aa362643fb2237 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Tue, 19 Feb 2019 21:28:25 +0100 Subject: [PATCH] Specialize parameter for simcall comm_test. --- include/simgrid/simix.h | 4 ++-- src/kernel/activity/CommImpl.cpp | 13 +++++-------- src/simix/libsmx.cpp | 4 ++-- src/simix/popping_accessors.hpp | 14 +++++++------- src/simix/popping_bodies.cpp | 4 ++-- src/simix/popping_generated.cpp | 2 +- src/simix/simcalls.in | 2 +- 7 files changed, 20 insertions(+), 23 deletions(-) diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index 1da9e46bea..66bfc62e27 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -224,13 +224,13 @@ XBT_PUBLIC smx_activity_t simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t XBT_PUBLIC smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, int (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), void* data); -#endif /* 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_PUBLIC void simcall_comm_wait(smx_activity_t comm, double timeout); -XBT_PUBLIC int simcall_comm_test(smx_activity_t comm); +XBT_PUBLIC int simcall_comm_test(const smx_activity_t& comm); XBT_PUBLIC int simcall_comm_testany(smx_activity_t* comms, size_t count); +#endif /************************** Synchro simcalls **********************************/ SG_BEGIN_DECL() diff --git a/src/kernel/activity/CommImpl.cpp b/src/kernel/activity/CommImpl.cpp index 59c9f69a52..3de6cf7468 100644 --- a/src/kernel/activity/CommImpl.cpp +++ b/src/kernel/activity/CommImpl.cpp @@ -235,25 +235,22 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_activity_t synchro, do } } -void simcall_HANDLER_comm_test(smx_simcall_t simcall, smx_activity_t synchro) +void simcall_HANDLER_comm_test(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comm) { - simgrid::kernel::activity::CommImplPtr comm = - boost::static_pointer_cast(synchro); - int res; if (MC_is_active() || MC_record_replay_is_active()) { res = comm->src_actor_ && comm->dst_actor_; if (res) - synchro->state_ = SIMIX_DONE; + comm->state_ = SIMIX_DONE; } else { - res = synchro->state_ != SIMIX_WAITING && synchro->state_ != SIMIX_RUNNING; + res = comm->state_ != SIMIX_WAITING && comm->state_ != SIMIX_RUNNING; } simcall_comm_test__set__result(simcall, res); if (simcall_comm_test__get__result(simcall)) { - synchro->simcalls_.push_back(simcall); - boost::static_pointer_cast(synchro)->finish(); + comm->simcalls_.push_back(simcall); + comm->finish(); } else { SIMIX_simcall_answer(simcall); } diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index aebacd11c9..b78fd0e2fe 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -243,9 +243,9 @@ void simcall_comm_wait(smx_activity_t comm, double timeout) * @ingroup simix_comm_management * */ -int simcall_comm_test(smx_activity_t comm) +int simcall_comm_test(const smx_activity_t& comm) { - return simcall_BODY_comm_test(comm); + return simcall_BODY_comm_test(static_cast(comm.get())); } /** diff --git a/src/simix/popping_accessors.hpp b/src/simix/popping_accessors.hpp index 7e7d2e9a7e..54f7d75471 100644 --- a/src/simix/popping_accessors.hpp +++ b/src/simix/popping_accessors.hpp @@ -702,17 +702,17 @@ static inline void simcall_comm_wait__set__timeout(smx_simcall_t simcall, double simgrid::simix::marshal(simcall->args[1], arg); } -static inline boost::intrusive_ptr simcall_comm_test__get__comm(smx_simcall_t simcall) +static inline simgrid::kernel::activity::CommImpl* simcall_comm_test__get__comm(smx_simcall_t simcall) { - return simgrid::simix::unmarshal>(simcall->args[0]); + return simgrid::simix::unmarshal(simcall->args[0]); } -static inline simgrid::kernel::activity::ActivityImpl* simcall_comm_test__getraw__comm(smx_simcall_t simcall) +static inline simgrid::kernel::activity::CommImpl* simcall_comm_test__getraw__comm(smx_simcall_t simcall) { - return simgrid::simix::unmarshal_raw(simcall->args[0]); + return simgrid::simix::unmarshal_raw(simcall->args[0]); } -static inline void simcall_comm_test__set__comm(smx_simcall_t simcall, boost::intrusive_ptr arg) +static inline void simcall_comm_test__set__comm(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* arg) { - simgrid::simix::marshal>(simcall->args[0], arg); + simgrid::simix::marshal(simcall->args[0], arg); } static inline int simcall_comm_test__get__result(smx_simcall_t simcall) { @@ -1042,7 +1042,7 @@ XBT_PRIVATE void simcall_HANDLER_comm_waitany(smx_simcall_t simcall, boost::intrusive_ptr* comms, size_t count, double timeout); XBT_PRIVATE void simcall_HANDLER_comm_wait(smx_simcall_t simcall, boost::intrusive_ptr comm, double timeout); -XBT_PRIVATE void simcall_HANDLER_comm_test(smx_simcall_t simcall, boost::intrusive_ptr comm); +XBT_PRIVATE void simcall_HANDLER_comm_test(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comm); XBT_PRIVATE void simcall_HANDLER_comm_testany(smx_simcall_t simcall, boost::intrusive_ptr* comms, size_t count); XBT_PRIVATE void simcall_HANDLER_mutex_lock(smx_simcall_t simcall, smx_mutex_t mutex); XBT_PRIVATE int simcall_HANDLER_mutex_trylock(smx_simcall_t simcall, smx_mutex_t mutex); diff --git a/src/simix/popping_bodies.cpp b/src/simix/popping_bodies.cpp index 7b18035e4d..64701378fe 100644 --- a/src/simix/popping_bodies.cpp +++ b/src/simix/popping_bodies.cpp @@ -115,11 +115,11 @@ inline static void simcall_BODY_comm_wait(boost::intrusive_ptr, double>(SIMCALL_COMM_WAIT, comm, timeout); } -inline static int simcall_BODY_comm_test(boost::intrusive_ptr comm) +inline static int simcall_BODY_comm_test(simgrid::kernel::activity::CommImpl* comm) { if (0) /* Go to that function to follow the code flow through the simcall barrier */ simcall_HANDLER_comm_test(&SIMIX_process_self()->simcall, comm); - return simcall>(SIMCALL_COMM_TEST, comm); + return simcall(SIMCALL_COMM_TEST, comm); } inline static int simcall_BODY_comm_testany(boost::intrusive_ptr* comms, size_t count) diff --git a/src/simix/popping_generated.cpp b/src/simix/popping_generated.cpp index f8318281c1..22cb2213cc 100644 --- a/src/simix/popping_generated.cpp +++ b/src/simix/popping_generated.cpp @@ -116,7 +116,7 @@ case SIMCALL_COMM_WAIT: break; case SIMCALL_COMM_TEST: - simcall_HANDLER_comm_test(simcall, simgrid::simix::unmarshal>(simcall->args[0])); + simcall_HANDLER_comm_test(simcall, simgrid::simix::unmarshal(simcall->args[0])); break; case SIMCALL_COMM_TESTANY: diff --git a/src/simix/simcalls.in b/src/simix/simcalls.in index 3235ddfc08..b590be7150 100644 --- a/src/simix/simcalls.in +++ b/src/simix/simcalls.in @@ -48,7 +48,7 @@ void comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buf boost::intrusive_ptr comm_irecv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double rate); int comm_waitany(boost::intrusive_ptr* comms, size_t count, double timeout) [[block]]; void comm_wait(boost::intrusive_ptr comm, double timeout) [[block]]; -int comm_test(boost::intrusive_ptr comm) [[block]]; +int comm_test(simgrid::kernel::activity::CommImpl* comm) [[block]]; int comm_testany(boost::intrusive_ptr* comms, size_t count) [[block]]; void mutex_lock(smx_mutex_t mutex) [[block]]; -- 2.20.1