int finished_index = -1;
/* create the equivalent dynar with SIMIX objects */
- xbt_dynar_t s_comms = xbt_dynar_new(sizeof(smx_activity_t), [](void*ptr){
- intrusive_ptr_release(*(simgrid::kernel::activity::ActivityImpl**)ptr);
- });
+ xbt_dynar_t s_comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), nullptr);
msg_comm_t comm;
unsigned int cursor;
xbt_dynar_foreach(comms, cursor, comm) {
- intrusive_ptr_add_ref(comm->s_comm.get());
xbt_dynar_push_as(s_comms, simgrid::kernel::activity::ActivityImpl*, comm->s_comm.get());
}
int Comm::wait_any_for(std::vector<CommPtr>* comms_in, double timeout)
{
// Map to dynar<Synchro*>:
- xbt_dynar_t comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), [](void* ptr) {
- intrusive_ptr_release(*(simgrid::kernel::activity::ActivityImpl**)ptr);
- });
+ xbt_dynar_t comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), nullptr);
for (auto const& comm : *comms_in) {
if (comm->state_ == Activity::State::INITED)
comm->start();
xbt_assert(comm->state_ == Activity::State::STARTED);
simgrid::kernel::activity::ActivityImpl* ptr = comm->pimpl_.get();
- intrusive_ptr_add_ref(ptr);
xbt_dynar_push_as(comms, simgrid::kernel::activity::ActivityImpl*, ptr);
}
// Call the underlying simcall:
if(count > 0) {
int size = 0;
// Wait for a request to complete
- xbt_dynar_init(&comms, sizeof(smx_activity_t), [](void*ptr){
- intrusive_ptr_release(*(simgrid::kernel::activity::ActivityImpl**)ptr);
- });
+ xbt_dynar_init(&comms, sizeof(simgrid::kernel::activity::ActivityImpl*), nullptr);
int *map = xbt_new(int, count);
XBT_DEBUG("Wait for one of %d", count);
for(int i = 0; i < count; i++) {
not(requests[i]->flags_ & MPI_REQ_FINISHED)) {
if (requests[i]->action_ != nullptr) {
XBT_DEBUG("Waiting any %p ", requests[i]);
- intrusive_ptr_add_ref(requests[i]->action_.get());
xbt_dynar_push_as(&comms, simgrid::kernel::activity::ActivityImpl*, requests[i]->action_.get());
map[size] = i;
size++;