From: Arnaud Giersch Date: Tue, 19 Feb 2019 21:03:42 +0000 (+0100) Subject: Specialize parameter for simcall comm_testany. X-Git-Tag: v3_22~288 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/22c1ae042f53e501bf25fc7eb53f3be1bc4d861e Specialize parameter for simcall comm_testany. --- diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index c8d991dab0..c67193010f 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -229,7 +229,7 @@ XBT_PUBLIC smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, XBT_PUBLIC unsigned int simcall_comm_waitany(smx_activity_t* comms, size_t count, double timeout); XBT_PUBLIC void simcall_comm_wait(const smx_activity_t& comm, double timeout); XBT_PUBLIC int simcall_comm_test(const smx_activity_t& comm); -XBT_PUBLIC int simcall_comm_testany(smx_activity_t* comms, size_t count); +XBT_PUBLIC int simcall_comm_testany(smx_activity_t comms[], size_t count); #endif /************************** Synchro simcalls **********************************/ diff --git a/src/kernel/activity/CommImpl.cpp b/src/kernel/activity/CommImpl.cpp index 36bfd5ec63..deb61c1baf 100644 --- a/src/kernel/activity/CommImpl.cpp +++ b/src/kernel/activity/CommImpl.cpp @@ -252,8 +252,7 @@ void simcall_HANDLER_comm_test(smx_simcall_t simcall, simgrid::kernel::activity: } } -void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::ActivityImplPtr comms[], - size_t count) +void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comms[], size_t count) { // The default result is -1 -- this means, "nothing is ready". // It can be changed below, but only if something matches. @@ -264,21 +263,21 @@ void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activi if (idx == -1) { SIMIX_simcall_answer(simcall); } else { - simgrid::kernel::activity::ActivityImplPtr synchro = comms[idx]; + simgrid::kernel::activity::CommImpl* comm = comms[idx]; simcall_comm_testany__set__result(simcall, idx); - synchro->simcalls_.push_back(simcall); - synchro->state_ = SIMIX_DONE; - boost::static_pointer_cast(synchro)->finish(); + comm->simcalls_.push_back(simcall); + comm->state_ = SIMIX_DONE; + comm->finish(); } return; } for (std::size_t i = 0; i != count; ++i) { - simgrid::kernel::activity::ActivityImplPtr synchro = comms[i]; - if (synchro->state_ != SIMIX_WAITING && synchro->state_ != SIMIX_RUNNING) { + simgrid::kernel::activity::ActivityImplPtr comm = comms[i]; + if (comm->state_ != SIMIX_WAITING && comm->state_ != SIMIX_RUNNING) { simcall_comm_testany__set__result(simcall, i); - synchro->simcalls_.push_back(simcall); - boost::static_pointer_cast(synchro)->finish(); + comm->simcalls_.push_back(simcall); + comm->finish(); return; } } diff --git a/src/mc/mc_request.cpp b/src/mc/mc_request.cpp index 3d5d0880d3..2eec09dfa3 100644 --- a/src/mc/mc_request.cpp +++ b/src/mc/mc_request.cpp @@ -386,7 +386,7 @@ bool request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx) break; case SIMCALL_COMM_TESTANY: - remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__getraw__comms(req) + idx)); + remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__get__comms(req) + idx)); break; default: diff --git a/src/mc/mc_state.cpp b/src/mc/mc_state.cpp index 14813de16a..68440e0949 100644 --- a/src/mc/mc_state.cpp +++ b/src/mc/mc_state.cpp @@ -166,10 +166,9 @@ static inline smx_simcall_t MC_state_get_request_for_process(simgrid::mc::State* state->internal_req.call = SIMCALL_COMM_TEST; if (state->transition.argument > 0) { - simgrid::kernel::activity::ActivityImpl* remote_comm = mc_model_checker->process().read( - remote(simcall_comm_testany__getraw__comms(req) + state->transition.argument)); - mc_model_checker->process().read(state->internal_comm, - remote(static_cast(remote_comm))); + simgrid::kernel::activity::CommImpl* remote_comm = + mc_model_checker->process().read(remote(simcall_comm_testany__get__comms(req) + state->transition.argument)); + mc_model_checker->process().read(state->internal_comm, remote(remote_comm)); } simcall_comm_test__set__comm(&state->internal_req, state->internal_comm.getBuffer()); diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 93f9529d65..c7f7d2cbe2 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -223,11 +223,15 @@ unsigned int simcall_comm_waitany(smx_activity_t* comms, size_t count, double ti /** * @ingroup simix_comm_management */ -int simcall_comm_testany(smx_activity_t* comms, size_t count) +int simcall_comm_testany(smx_activity_t comms[], size_t count) { if (count == 0) return -1; - return simcall_BODY_comm_testany(comms, count); + std::unique_ptr rcomms(new simgrid::kernel::activity::CommImpl*[count]); + std::transform(comms, comms + count, rcomms.get(), [](const smx_activity_t comm) { + return static_cast(comm.get()); + }); + return simcall_BODY_comm_testany(rcomms.get(), count); } /** diff --git a/src/simix/popping_accessors.hpp b/src/simix/popping_accessors.hpp index 0e08a069a2..50de5c8e46 100644 --- a/src/simix/popping_accessors.hpp +++ b/src/simix/popping_accessors.hpp @@ -727,17 +727,17 @@ static inline void simcall_comm_test__set__result(smx_simcall_t simcall, int res simgrid::simix::marshal(simcall->result, result); } -static inline boost::intrusive_ptr* simcall_comm_testany__get__comms(smx_simcall_t simcall) +static inline simgrid::kernel::activity::CommImpl** simcall_comm_testany__get__comms(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_testany__getraw__comms(smx_simcall_t simcall) +static inline simgrid::kernel::activity::CommImpl** simcall_comm_testany__getraw__comms(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_testany__set__comms(smx_simcall_t simcall, boost::intrusive_ptr* arg) +static inline void simcall_comm_testany__set__comms(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 size_t simcall_comm_testany__get__count(smx_simcall_t simcall) { @@ -1044,7 +1044,8 @@ XBT_PRIVATE void simcall_HANDLER_comm_waitany(smx_simcall_t simcall, XBT_PRIVATE void simcall_HANDLER_comm_wait(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comm, double timeout); 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_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl** 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); XBT_PRIVATE void simcall_HANDLER_mutex_unlock(smx_simcall_t simcall, smx_mutex_t mutex); diff --git a/src/simix/popping_bodies.cpp b/src/simix/popping_bodies.cpp index 7e43ac8626..894e575eb5 100644 --- a/src/simix/popping_bodies.cpp +++ b/src/simix/popping_bodies.cpp @@ -122,11 +122,11 @@ inline static int simcall_BODY_comm_test(simgrid::kernel::activity::CommImpl* co return simcall(SIMCALL_COMM_TEST, comm); } -inline static int simcall_BODY_comm_testany(boost::intrusive_ptr* comms, size_t count) +inline static int simcall_BODY_comm_testany(simgrid::kernel::activity::CommImpl** comms, size_t count) { if (0) /* Go to that function to follow the code flow through the simcall barrier */ simcall_HANDLER_comm_testany(&SIMIX_process_self()->simcall, comms, count); - return simcall*, size_t>(SIMCALL_COMM_TESTANY, comms, count); + return simcall(SIMCALL_COMM_TESTANY, comms, count); } inline static void simcall_BODY_mutex_lock(smx_mutex_t mutex) diff --git a/src/simix/popping_generated.cpp b/src/simix/popping_generated.cpp index 3dcae88e72..bba0c71872 100644 --- a/src/simix/popping_generated.cpp +++ b/src/simix/popping_generated.cpp @@ -121,7 +121,9 @@ case SIMCALL_COMM_TEST: break; case SIMCALL_COMM_TESTANY: - simcall_HANDLER_comm_testany(simcall, simgrid::simix::unmarshal*>(simcall->args[0]), simgrid::simix::unmarshal(simcall->args[1])); + simcall_HANDLER_comm_testany(simcall, + simgrid::simix::unmarshal(simcall->args[0]), + simgrid::simix::unmarshal(simcall->args[1])); break; case SIMCALL_MUTEX_LOCK: diff --git a/src/simix/simcalls.in b/src/simix/simcalls.in index f0139db511..534a973f94 100644 --- a/src/simix/simcalls.in +++ b/src/simix/simcalls.in @@ -49,7 +49,7 @@ boost::intrusive_ptr comm_irecv(smx_act int comm_waitany(boost::intrusive_ptr* comms, size_t count, double timeout) [[block]]; void comm_wait(simgrid::kernel::activity::CommImpl* comm, double timeout) [[block]]; int comm_test(simgrid::kernel::activity::CommImpl* comm) [[block]]; -int comm_testany(boost::intrusive_ptr* comms, size_t count) [[block]]; +int comm_testany(simgrid::kernel::activity::CommImpl** comms, size_t count) [[block]]; void mutex_lock(smx_mutex_t mutex) [[block]]; int mutex_trylock(smx_mutex_t mutex);