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()
}
}
-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<simgrid::kernel::activity::CommImpl>(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<simgrid::kernel::activity::CommImpl>(synchro)->finish();
+ comm->simcalls_.push_back(simcall);
+ comm->finish();
} else {
SIMIX_simcall_answer(simcall);
}
* @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<simgrid::kernel::activity::CommImpl*>(comm.get()));
}
/**
simgrid::simix::marshal<double>(simcall->args[1], arg);
}
-static inline boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> 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<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>>(simcall->args[0]);
+ return simgrid::simix::unmarshal<simgrid::kernel::activity::CommImpl*>(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<simgrid::kernel::activity::ActivityImpl*>(simcall->args[0]);
+ return simgrid::simix::unmarshal_raw<simgrid::kernel::activity::CommImpl*>(simcall->args[0]);
}
-static inline void simcall_comm_test__set__comm(smx_simcall_t simcall, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> arg)
+static inline void simcall_comm_test__set__comm(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* arg)
{
- simgrid::simix::marshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>>(simcall->args[0], arg);
+ simgrid::simix::marshal<simgrid::kernel::activity::CommImpl*>(simcall->args[0], arg);
}
static inline int simcall_comm_test__get__result(smx_simcall_t simcall)
{
boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms,
size_t count, double timeout);
XBT_PRIVATE void simcall_HANDLER_comm_wait(smx_simcall_t simcall, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> comm, double timeout);
-XBT_PRIVATE void simcall_HANDLER_comm_test(smx_simcall_t simcall, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> 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<simgrid::kernel::activity::ActivityImpl>* 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);
return simcall<void, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>, double>(SIMCALL_COMM_WAIT, comm, timeout);
}
-inline static int simcall_BODY_comm_test(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> 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<int, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>>(SIMCALL_COMM_TEST, comm);
+ return simcall<int, simgrid::kernel::activity::CommImpl*>(SIMCALL_COMM_TEST, comm);
}
inline static int simcall_BODY_comm_testany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count)
break;
case SIMCALL_COMM_TEST:
- simcall_HANDLER_comm_test(simcall, simgrid::simix::unmarshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>>(simcall->args[0]));
+ simcall_HANDLER_comm_test(simcall, simgrid::simix::unmarshal<simgrid::kernel::activity::CommImpl*>(simcall->args[0]));
break;
case SIMCALL_COMM_TESTANY:
boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> 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<simgrid::kernel::activity::ActivityImpl>* comms, size_t count, double timeout) [[block]];
void comm_wait(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> comm, double timeout) [[block]];
-int comm_test(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> comm) [[block]];
+int comm_test(simgrid::kernel::activity::CommImpl* comm) [[block]];
int comm_testany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count) [[block]];
void mutex_lock(smx_mutex_t mutex) [[block]];