continue; // if process handling comm is killed
if (auto* observer =
dynamic_cast<kernel::actor::ExecutionWaitanySimcall*>(simcall->observer_)) { // simcall is a wait_any?
- const auto* execs = observer->get_execs();
+ const auto& execs = observer->get_execs();
- for (auto* exec : *execs) {
+ for (auto* exec : execs) {
exec->unregister_simcall(simcall);
if (simcall->timeout_cb_) {
}
if (not MC_is_active() && not MC_record_replay_is_active()) {
- auto element = std::find(execs->begin(), execs->end(), this);
- int rank = element != execs->end() ? static_cast<int>(std::distance(execs->begin(), element)) : -1;
+ auto element = std::find(execs.begin(), execs.end(), this);
+ int rank = element != execs.end() ? static_cast<int>(std::distance(execs.begin(), element)) : -1;
observer->set_result(rank);
}
}
return this;
}
-void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>* execs, double timeout)
+void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>& execs, double timeout)
{
if (timeout < 0.0) {
issuer->simcall_.timeout_cb_ = nullptr;
} else {
- issuer->simcall_.timeout_cb_ = simgrid::simix::Timer::set(SIMIX_get_clock() + timeout, [issuer, execs]() {
+ issuer->simcall_.timeout_cb_ = simgrid::simix::Timer::set(SIMIX_get_clock() + timeout, [issuer, &execs]() {
issuer->simcall_.timeout_cb_ = nullptr;
- for (auto* exec : *execs)
+ for (auto* exec : execs)
exec->unregister_simcall(&issuer->simcall_);
// default result (-1) is set in mc::ExecutionWaitanySimcall
issuer->simcall_answer();
});
}
- for (auto* exec : *execs) {
+ for (auto* exec : execs) {
/* associate this simcall to the the synchro */
exec->simcalls_.push_back(&issuer->simcall_);
void post() override;
void finish() override;
- static void wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>* execs, double timeout);
+ static void wait_any_for(actor::ActorImpl* issuer, const std::vector<ExecImpl*>& execs, double timeout);
static xbt::signal<void(ExecImpl const&, s4u::Host*)> on_migration;
};
class ExecutionWaitanySimcall : public SimcallObserver {
friend kernel::activity::ExecImpl;
- const std::vector<kernel::activity::ExecImpl*>* const execs_;
+ const std::vector<kernel::activity::ExecImpl*>& execs_;
const double timeout_;
int result_ = -1; // default result for simcall
void set_result(int res) { result_ = res; }
public:
- ExecutionWaitanySimcall(smx_actor_t actor, const std::vector<kernel::activity::ExecImpl*>* execs, double timeout)
+ ExecutionWaitanySimcall(smx_actor_t actor, const std::vector<kernel::activity::ExecImpl*>& execs, double timeout)
: SimcallObserver(actor), execs_(execs), timeout_(timeout)
{
}
bool is_visible() const override { return false; }
std::string to_string(int times_considered) const override;
std::string dot_label() const override;
- const std::vector<kernel::activity::ExecImpl*>* get_execs() const { return execs_; }
+ const std::vector<kernel::activity::ExecImpl*>& get_execs() const { return execs_; }
double get_timeout() const { return timeout_; }
int get_result() const { return result_; }
[](const ExecPtr& exec) { return static_cast<kernel::activity::ExecImpl*>(exec->pimpl_.get()); });
kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
- kernel::actor::ExecutionWaitanySimcall observer{issuer, &rexecs, timeout};
+ kernel::actor::ExecutionWaitanySimcall observer{issuer, rexecs, timeout};
int changed_pos = kernel::actor::simcall_blocking(
[&observer] {
kernel::activity::ExecImpl::wait_any_for(observer.get_issuer(), observer.get_execs(), observer.get_timeout());
unsigned int simcall_execution_waitany_for(simgrid::kernel::activity::ExecImpl* execs[], size_t count,
double timeout) // XBT_ATTRIB_DEPRECATED_v331
{
- std::vector<simgrid::kernel::activity::ExecImpl*> execsv(execs, execs + count);
+ std::vector<simgrid::kernel::activity::ExecImpl*> execs_vec(execs, execs + count);
simgrid::kernel::actor::ActorImpl* issuer = simgrid::kernel::actor::ActorImpl::self();
- simgrid::kernel::actor::ExecutionWaitanySimcall observer{issuer, &execsv, timeout};
+ simgrid::kernel::actor::ExecutionWaitanySimcall observer{issuer, execs_vec, timeout};
return simgrid::kernel::actor::simcall_blocking(
[&observer] {
simgrid::kernel::activity::ExecImpl::wait_any_for(observer.get_issuer(), observer.get_execs(),