From 6b8dc0899319667769a220397df30b6dac0e2b8f Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Mon, 10 Feb 2020 16:02:14 +0100 Subject: [PATCH] Move ::wait_for() from ExecImpl and IoImpl to ActivityImpl. --- src/kernel/activity/ActivityImpl.cpp | 34 ++++++++++++++++++++++++++++ src/kernel/activity/ActivityImpl.hpp | 1 + src/kernel/activity/ExecImpl.cpp | 31 ------------------------- src/kernel/activity/ExecImpl.hpp | 1 - src/kernel/activity/IoImpl.cpp | 31 ------------------------- src/kernel/activity/IoImpl.hpp | 1 - 6 files changed, 35 insertions(+), 64 deletions(-) diff --git a/src/kernel/activity/ActivityImpl.cpp b/src/kernel/activity/ActivityImpl.cpp index a4060f643e..86aeca3f35 100644 --- a/src/kernel/activity/ActivityImpl.cpp +++ b/src/kernel/activity/ActivityImpl.cpp @@ -4,6 +4,8 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "src/kernel/activity/ActivityImpl.hpp" +#include "simgrid/modelchecker.h" +#include "src/mc/mc_replay.hpp" #include "src/simix/smx_private.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process); @@ -46,6 +48,38 @@ bool ActivityImpl::test() return false; } +void ActivityImpl::wait_for(actor::ActorImpl* issuer, double timeout) +{ + XBT_DEBUG("Wait for execution of synchro %p, state %d", this, (int)state_); + xbt_assert(std::isfinite(timeout), "timeout is not finite!"); + + /* Associate this simcall to the synchro */ + register_simcall(&issuer->simcall); + + if (MC_is_active() || MC_record_replay_is_active()) { + int idx = SIMCALL_GET_MC_VALUE(issuer->simcall); + if (idx == 0) { + state_ = simgrid::kernel::activity::State::DONE; + } else { + /* If we reached this point, the wait simcall must have a timeout */ + /* Otherwise it shouldn't be enabled and executed by the MC */ + if (timeout < 0.0) + THROW_IMPOSSIBLE; + state_ = simgrid::kernel::activity::State::TIMEOUT; + } + finish(); + return; + } + + /* If the synchro is already finished then perform the error handling */ + if (state_ != simgrid::kernel::activity::State::RUNNING) + finish(); + else { + /* we need a sleep action (even when there is no timeout) to be notified of host failures */ + set_timeout(timeout); + } +} + void ActivityImpl::suspend() { if (surf_action_ == nullptr) diff --git a/src/kernel/activity/ActivityImpl.hpp b/src/kernel/activity/ActivityImpl.hpp index dbc48bdbe9..c2636daf30 100644 --- a/src/kernel/activity/ActivityImpl.hpp +++ b/src/kernel/activity/ActivityImpl.hpp @@ -45,6 +45,7 @@ public: resource::Action* surf_action_ = nullptr; bool test(); + void wait_for(actor::ActorImpl* issuer, double timeout); virtual ActivityImpl& set_timeout(double timeout) { THROW_UNIMPLEMENTED; } virtual void suspend(); diff --git a/src/kernel/activity/ExecImpl.cpp b/src/kernel/activity/ExecImpl.cpp index fc685eda24..433d9bae39 100644 --- a/src/kernel/activity/ExecImpl.cpp +++ b/src/kernel/activity/ExecImpl.cpp @@ -120,37 +120,6 @@ ExecImpl* ExecImpl::start() return this; } -void ExecImpl::wait_for(actor::ActorImpl* issuer, double timeout) -{ - XBT_DEBUG("Wait for execution of synchro %p, state %d", this, (int)state_); - xbt_assert(std::isfinite(timeout), "timeout is not finite!"); - - /* Associate this simcall to the synchro */ - register_simcall(&issuer->simcall); - - if (MC_is_active() || MC_record_replay_is_active()) { - int idx = SIMCALL_GET_MC_VALUE(issuer->simcall); - if (idx == 0) { - state_ = simgrid::kernel::activity::State::DONE; - } else { - /* If we reached this point, the wait simcall must have a timeout */ - /* Otherwise it shouldn't be enabled and executed by the MC */ - if (timeout < 0.0) - THROW_IMPOSSIBLE; - state_ = simgrid::kernel::activity::State::TIMEOUT; - } - finish(); - return; - } - - /* If the synchro is already finished then perform the error handling */ - if (state_ != simgrid::kernel::activity::State::RUNNING) { - finish(); - } else { /* we need a sleep action (even when there is no timeout) to be notified of host failures */ - set_timeout(timeout); - } -} - double ExecImpl::get_seq_remaining_ratio() { return (surf_action_ == nullptr) ? 0 : surf_action_->get_remains() / surf_action_->get_cost(); diff --git a/src/kernel/activity/ExecImpl.hpp b/src/kernel/activity/ExecImpl.hpp index 0a3180c867..b233677154 100644 --- a/src/kernel/activity/ExecImpl.hpp +++ b/src/kernel/activity/ExecImpl.hpp @@ -42,7 +42,6 @@ public: virtual ActivityImpl* migrate(s4u::Host* to); ExecImpl* start(); - void wait_for(actor::ActorImpl* issuer, double timeout); void post() override; void finish() override; diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index a246446643..0a7cc64932 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -71,37 +71,6 @@ IoImpl* IoImpl::start() return this; } -void IoImpl::wait_for(actor::ActorImpl* issuer, double timeout) -{ - XBT_DEBUG("Wait for execution of synchro %p, state %d", this, (int)state_); - - /* Associate this simcall to the synchro */ - register_simcall(&issuer->simcall); - - if (MC_is_active() || MC_record_replay_is_active()) { - int idx = SIMCALL_GET_MC_VALUE(issuer->simcall); - if (idx == 0) { - state_ = simgrid::kernel::activity::State::DONE; - } else { - /* If we reached this point, the wait simcall must have a timeout */ - /* Otherwise it shouldn't be enabled and executed by the MC */ - if (timeout < 0.0) - THROW_IMPOSSIBLE; - state_ = simgrid::kernel::activity::State::TIMEOUT; - } - finish(); - return; - } - - /* If the synchro is already finished then perform the error handling */ - if (state_ != simgrid::kernel::activity::State::RUNNING) - finish(); - else { - /* we need a sleep action (even when there is no timeout) to be notified of host failures */ - set_timeout(timeout); - } -} - void IoImpl::post() { performed_ioops_ = surf_action_->get_cost(); diff --git a/src/kernel/activity/IoImpl.hpp b/src/kernel/activity/IoImpl.hpp index 92680f756c..707372e5ea 100644 --- a/src/kernel/activity/IoImpl.hpp +++ b/src/kernel/activity/IoImpl.hpp @@ -34,7 +34,6 @@ public: resource::StorageImpl* get_storage() const { return storage_; } IoImpl* start(); - void wait_for(actor::ActorImpl* issuer, double timeout); void post() override; void finish() override; -- 2.20.1