X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9b423008348114ecf3f281a993ffdfdb5770e1a8..35a644bdf9d0c5603c9483f03f913e4a649638d6:/src/kernel/actor/SimcallObserver.cpp diff --git a/src/kernel/actor/SimcallObserver.cpp b/src/kernel/actor/SimcallObserver.cpp index 87991ccefa..d7657a4bcd 100644 --- a/src/kernel/actor/SimcallObserver.cpp +++ b/src/kernel/actor/SimcallObserver.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2019-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2019-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -7,6 +7,7 @@ #include "simgrid/s4u/Host.hpp" #include "src/kernel/activity/CommImpl.hpp" #include "src/kernel/activity/MailboxImpl.hpp" +#include "src/kernel/activity/MutexImpl.hpp" #include "src/kernel/actor/ActorImpl.hpp" #include "src/mc/mc_config.hpp" @@ -16,15 +17,15 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_observer, mc, "Logging specific to MC simcall namespace simgrid::kernel::actor { -void SimcallObserver::serialize(std::stringstream& stream) const -{ - stream << (short)mc::Transition::Type::UNKNOWN; -} void RandomSimcall::serialize(std::stringstream& stream) const { stream << (short)mc::Transition::Type::RANDOM << ' '; stream << min_ << ' ' << max_; } +std::string RandomSimcall::to_string() const +{ + return "Random(min:" + std::to_string(min_) + " max:" + std::to_string(max_) + ")"; +} void RandomSimcall::prepare(int times_considered) { @@ -37,12 +38,50 @@ int RandomSimcall::get_max_consider() const return max_ - min_ + 1; } -bool ConditionWaitSimcall::is_enabled() +ActorJoinSimcall::ActorJoinSimcall(ActorImpl* actor, ActorImpl* other, double timeout) + : SimcallObserver(actor), other_(s4u::ActorPtr(other->get_iface())), timeout_(timeout) { - 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; } +bool ActorJoinSimcall::is_enabled() +{ + return other_->get_impl()->wannadie(); +} +void ActorJoinSimcall::serialize(std::stringstream& stream) const +{ + stream << (short)mc::Transition::Type::ACTOR_JOIN << ' '; + stream << other_->get_pid() << ' ' << (timeout_ > 0); +} +std::string ActorJoinSimcall::to_string() const +{ + return "ActorJoin(pid:" + std::to_string(other_->get_pid()) + ")"; +} +void ActorSleepSimcall::serialize(std::stringstream& stream) const +{ + stream << (short)mc::Transition::Type::ACTOR_SLEEP; +} + +std::string ActorSleepSimcall::to_string() const +{ + return "ActorSleep()"; +} + +void ObjectAccessSimcallObserver::serialize(std::stringstream& stream) const +{ + stream << (short)mc::Transition::Type::OBJECT_ACCESS << ' '; + stream << object_ << ' ' << get_owner()->get_pid(); +} +std::string ObjectAccessSimcallObserver::to_string() const +{ + return "ObjectAccess(obj:" + ptr_to_id(object_) + + " owner:" + std::to_string(get_owner()->get_pid()) + ")"; +} +bool ObjectAccessSimcallObserver::is_visible() const +{ + return get_owner() != get_issuer(); +} +ActorImpl* ObjectAccessSimcallObserver::get_owner() const +{ + return object_->simcall_owner_; +} + } // namespace simgrid::kernel::actor