From 425f2a49fa5770e2f008b0348245ea6b444118a4 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Mon, 12 Apr 2021 11:42:30 +0200 Subject: [PATCH] Use a reference for ExecImpl::wait_any_for()'s vector. --- src/kernel/activity/ExecImpl.cpp | 16 ++++++++-------- src/kernel/activity/ExecImpl.hpp | 2 +- src/kernel/actor/SimcallObserver.hpp | 6 +++--- src/s4u/s4u_Exec.cpp | 2 +- src/simix/libsmx.cpp | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/kernel/activity/ExecImpl.cpp b/src/kernel/activity/ExecImpl.cpp index 59ca43caff..2d553a8f7a 100644 --- a/src/kernel/activity/ExecImpl.cpp +++ b/src/kernel/activity/ExecImpl.cpp @@ -168,9 +168,9 @@ void ExecImpl::finish() continue; // if process handling comm is killed if (auto* observer = dynamic_cast(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_) { @@ -180,8 +180,8 @@ void ExecImpl::finish() } 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(std::distance(execs->begin(), element)) : -1; + auto element = std::find(execs.begin(), execs.end(), this); + int rank = element != execs.end() ? static_cast(std::distance(execs.begin(), element)) : -1; observer->set_result(rank); } } @@ -237,21 +237,21 @@ ActivityImpl* ExecImpl::migrate(s4u::Host* to) return this; } -void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector* execs, double timeout) +void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector& 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_); diff --git a/src/kernel/activity/ExecImpl.hpp b/src/kernel/activity/ExecImpl.hpp index 1972af0a8f..6bfc5941e6 100644 --- a/src/kernel/activity/ExecImpl.hpp +++ b/src/kernel/activity/ExecImpl.hpp @@ -52,7 +52,7 @@ public: void post() override; void finish() override; - static void wait_any_for(actor::ActorImpl* issuer, const std::vector* execs, double timeout); + static void wait_any_for(actor::ActorImpl* issuer, const std::vector& execs, double timeout); static xbt::signal on_migration; }; diff --git a/src/kernel/actor/SimcallObserver.hpp b/src/kernel/actor/SimcallObserver.hpp index 0aea316129..ad74a54a5d 100644 --- a/src/kernel/actor/SimcallObserver.hpp +++ b/src/kernel/actor/SimcallObserver.hpp @@ -146,21 +146,21 @@ public: class ExecutionWaitanySimcall : public SimcallObserver { friend kernel::activity::ExecImpl; - const std::vector* const execs_; + const std::vector& 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* execs, double timeout) + ExecutionWaitanySimcall(smx_actor_t actor, const std::vector& 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* get_execs() const { return execs_; } + const std::vector& get_execs() const { return execs_; } double get_timeout() const { return timeout_; } int get_result() const { return result_; } diff --git a/src/s4u/s4u_Exec.cpp b/src/s4u/s4u_Exec.cpp index 0affcec6c6..0fe8c0ae59 100644 --- a/src/s4u/s4u_Exec.cpp +++ b/src/s4u/s4u_Exec.cpp @@ -73,7 +73,7 @@ int Exec::wait_any_for(std::vector* execs, double timeout) [](const ExecPtr& exec) { return static_cast(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()); diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 41a204bbf7..8203c2fd5e 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -60,9 +60,9 @@ bool simcall_execution_test(const simgrid::kernel::activity::ActivityImplPtr& ex unsigned int simcall_execution_waitany_for(simgrid::kernel::activity::ExecImpl* execs[], size_t count, double timeout) // XBT_ATTRIB_DEPRECATED_v331 { - std::vector execsv(execs, execs + count); + std::vector 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(), -- 2.20.1