From 8d0b1f2f1840a16bb9551f1cfd74f2488599f95b Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 12 Nov 2023 23:46:31 +0100 Subject: [PATCH] Move the conditionVariable observer to the right file --- src/kernel/activity/ConditionVariableImpl.cpp | 2 +- src/kernel/actor/SimcallObserver.cpp | 18 ---------------- src/kernel/actor/SimcallObserver.hpp | 19 ----------------- src/kernel/actor/SynchroObserver.cpp | 18 ++++++++++++++++ src/kernel/actor/SynchroObserver.hpp | 21 +++++++++++++++++++ src/s4u/s4u_ConditionVariable.cpp | 2 +- 6 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/kernel/activity/ConditionVariableImpl.cpp b/src/kernel/activity/ConditionVariableImpl.cpp index 2315ebe59e..59a681e9f1 100644 --- a/src/kernel/activity/ConditionVariableImpl.cpp +++ b/src/kernel/activity/ConditionVariableImpl.cpp @@ -6,7 +6,7 @@ #include "src/kernel/activity/ConditionVariableImpl.hpp" #include "src/kernel/activity/MutexImpl.hpp" #include "src/kernel/activity/Synchro.hpp" -#include "src/kernel/actor/SimcallObserver.hpp" +#include "src/kernel/actor/SynchroObserver.hpp" #include // std::isfinite XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_condition, ker_synchro, "Condition variables kernel-space implementation"); diff --git a/src/kernel/actor/SimcallObserver.cpp b/src/kernel/actor/SimcallObserver.cpp index 3bd6ab97f1..d7657a4bcd 100644 --- a/src/kernel/actor/SimcallObserver.cpp +++ b/src/kernel/actor/SimcallObserver.cpp @@ -38,24 +38,6 @@ int RandomSimcall::get_max_consider() const return max_ - min_ + 1; } -bool ConditionWaitSimcall::is_enabled() -{ - if (static bool warned = false; not warned) { - XBT_INFO("Using condition variables in model-checked code is still experimental. Use at your own risk"); - warned = true; - } - return true; -} -void ConditionWaitSimcall::serialize(std::stringstream& stream) const -{ - THROW_UNIMPLEMENTED; -} -std::string ConditionWaitSimcall::to_string() const -{ - return "ConditionWait(cond_id:" + ptr_to_id(get_cond()) + - " mutex_id:" + std::to_string(get_mutex()->get_id()) + ")"; -} - ActorJoinSimcall::ActorJoinSimcall(ActorImpl* actor, ActorImpl* other, double timeout) : SimcallObserver(actor), other_(s4u::ActorPtr(other->get_iface())), timeout_(timeout) { diff --git a/src/kernel/actor/SimcallObserver.hpp b/src/kernel/actor/SimcallObserver.hpp index d43ac00ead..c7d1353620 100644 --- a/src/kernel/actor/SimcallObserver.hpp +++ b/src/kernel/actor/SimcallObserver.hpp @@ -94,25 +94,6 @@ public: int get_value() const { return next_value_; } }; -class ConditionWaitSimcall final : public ResultingSimcall { - activity::ConditionVariableImpl* const cond_; - activity::MutexImpl* const mutex_; - const double timeout_; - -public: - ConditionWaitSimcall(ActorImpl* actor, activity::ConditionVariableImpl* cond, activity::MutexImpl* mutex, - double timeout = -1.0) - : ResultingSimcall(actor, false), cond_(cond), mutex_(mutex), timeout_(timeout) - { - } - void serialize(std::stringstream& stream) const override; - std::string to_string() const override; - bool is_enabled() override; - activity::ConditionVariableImpl* get_cond() const { return cond_; } - activity::MutexImpl* get_mutex() const { return mutex_; } - double get_timeout() const { return timeout_; } -}; - class ActorJoinSimcall final : public SimcallObserver { s4u::ActorPtr const other_; // We need a Ptr to ensure access to the actor after its end, but Ptr requires s4u const double timeout_; diff --git a/src/kernel/actor/SynchroObserver.cpp b/src/kernel/actor/SynchroObserver.cpp index 4382ec49a0..1dff82aaca 100644 --- a/src/kernel/actor/SynchroObserver.cpp +++ b/src/kernel/actor/SynchroObserver.cpp @@ -106,4 +106,22 @@ bool BarrierObserver::is_enabled() (type_ == mc::Transition::Type::BARRIER_WAIT && acquisition_ != nullptr && acquisition_->granted_); } +bool ConditionWaitSimcall::is_enabled() +{ + if (static bool warned = false; not warned) { + XBT_INFO("Using condition variables in model-checked code is still experimental. Use at your own risk"); + warned = true; + } + return true; +} +void ConditionWaitSimcall::serialize(std::stringstream& stream) const +{ + THROW_UNIMPLEMENTED; +} +std::string ConditionWaitSimcall::to_string() const +{ + return "ConditionWait(cond_id:" + ptr_to_id(get_cond()) + + " mutex_id:" + std::to_string(get_mutex()->get_id()) + ")"; +} + } // namespace simgrid::kernel::actor diff --git a/src/kernel/actor/SynchroObserver.hpp b/src/kernel/actor/SynchroObserver.hpp index b7071612de..7c5ddc0c9d 100644 --- a/src/kernel/actor/SynchroObserver.hpp +++ b/src/kernel/actor/SynchroObserver.hpp @@ -7,6 +7,7 @@ #define SIMGRID_MC_MUTEX_OBSERVER_HPP #include "simgrid/forward.h" +#include "src/kernel/activity/ConditionVariableImpl.hpp" #include "src/kernel/activity/MutexImpl.hpp" #include "src/kernel/actor/ActorImpl.hpp" #include "src/kernel/actor/SimcallObserver.hpp" @@ -80,6 +81,26 @@ public: double get_timeout() const { return timeout_; } }; +class ConditionWaitSimcall final : public ResultingSimcall { + mc::Transition::Type type_; + activity::ConditionVariableImpl* const cond_; + activity::MutexImpl* const mutex_; + const double timeout_; + +public: + ConditionWaitSimcall(ActorImpl* actor, activity::ConditionVariableImpl* cond, activity::MutexImpl* mutex, + double timeout = -1.0) + : ResultingSimcall(actor, false), cond_(cond), mutex_(mutex), timeout_(timeout) + { + } + void serialize(std::stringstream& stream) const override; + std::string to_string() const override; + bool is_enabled() override; + activity::ConditionVariableImpl* get_cond() const { return cond_; } + activity::MutexImpl* get_mutex() const { return mutex_; } + double get_timeout() const { return timeout_; } +}; + } // namespace simgrid::kernel::actor #endif diff --git a/src/s4u/s4u_ConditionVariable.cpp b/src/s4u/s4u_ConditionVariable.cpp index db0e182f9f..5355b1a99d 100644 --- a/src/s4u/s4u_ConditionVariable.cpp +++ b/src/s4u/s4u_ConditionVariable.cpp @@ -9,7 +9,7 @@ #include "src/kernel/activity/ActivityImpl.hpp" #include "src/kernel/activity/ConditionVariableImpl.hpp" -#include "src/kernel/actor/SimcallObserver.hpp" +#include "src/kernel/actor/SynchroObserver.hpp" #include -- 2.20.1