- std::unique_ptr<simgrid::kernel::activity::CommImpl* []> rcomms(
- new simgrid::kernel::activity::CommImpl*[comms->size()]);
- std::transform(begin(*comms), end(*comms), rcomms.get(), [](const CommPtr& comm) {
- return static_cast<simgrid::kernel::activity::CommImpl*>(comm->pimpl_.get());
- });
- return simcall_comm_waitany(rcomms.get(), comms->size(), timeout);
+ std::unique_ptr<kernel::activity::CommImpl* []> rcomms(new kernel::activity::CommImpl*[comms->size()]);
+ std::transform(begin(*comms), end(*comms), rcomms.get(),
+ [](const CommPtr& comm) { return static_cast<kernel::activity::CommImpl*>(comm->pimpl_.get()); });
+ int changed_pos = simcall_comm_waitany(rcomms.get(), comms->size(), timeout);
+ if (changed_pos != -1)
+ comms->at(changed_pos)->release_dependencies();
+ return changed_pos;