X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dd493bf4a168bd2b379810313916e1a4e0898388..a8a66c743439c94d5de5bcb8a3e50dcd207b6d2f:/src/kernel/actor/SimcallObserver.hpp diff --git a/src/kernel/actor/SimcallObserver.hpp b/src/kernel/actor/SimcallObserver.hpp index a4095e4a42..5b47b31adb 100644 --- a/src/kernel/actor/SimcallObserver.hpp +++ b/src/kernel/actor/SimcallObserver.hpp @@ -52,11 +52,15 @@ public: { /* Nothing to do by default */ } - /** Serialize to the given string buffer */ - virtual void serialize(std::stringstream& stream) const; + /** Serialize to the given string buffer, to send over the network */ + virtual void serialize(std::stringstream& stream) const = 0; - /** Some simcalls may only be observable under some conditions. - * Most simcalls are not visible from the MC because they don't have an observer at all. */ + /** Used to debug (to display the simcall on which each actor is blocked when displaying it */ + virtual std::string to_string() const = 0; + + /** Whether the MC should see this simcall. + * Simcall that don't have an observer (ie, most of them) are not visible from the MC, but if there is an observer, + * they are observable by default. */ virtual bool is_visible() const { return true; } }; @@ -83,6 +87,7 @@ public: xbt_assert(min < max); } void serialize(std::stringstream& stream) const override; + std::string to_string() const override; int get_max_consider() const override; void prepare(int times_considered) override; int get_value() const { return next_value_; } @@ -99,13 +104,27 @@ public: : 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; - bool is_visible() const override { return false; } 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_; + +public: + ActorJoinSimcall(ActorImpl* actor, ActorImpl* other, double timeout = -1.0); + void serialize(std::stringstream& stream) const override; + std::string to_string() const override; + bool is_enabled() override; + + s4u::ActorPtr get_other_actor() const { return other_; } + double get_timeout() const { return timeout_; } +}; } // namespace simgrid::kernel::actor #endif