X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5ed37babb2fa9097abe82df299c0aa259ed84d5a..ab5814bd4ea6117ecf9ac2df328333e89eb45f5f:/src/kernel/activity/CommImpl.hpp?ds=sidebyside diff --git a/src/kernel/activity/CommImpl.hpp b/src/kernel/activity/CommImpl.hpp index 8e18d1e40d..4f249a4bbf 100644 --- a/src/kernel/activity/CommImpl.hpp +++ b/src/kernel/activity/CommImpl.hpp @@ -14,9 +14,10 @@ namespace simgrid::kernel::activity { enum class CommImplType { SEND, RECEIVE }; +using timeout_action_type = std::unique_ptr>; + class XBT_PUBLIC CommImpl : public ActivityImpl_T { ~CommImpl() override; - void cleanup_surf(); static std::function copy_data_callback_; @@ -31,6 +32,9 @@ class XBT_PUBLIC CommImpl : public ActivityImpl_T { s4u::Host* to_ = nullptr; /* Otherwise, computed at start() time from the actors */ CommImplType type_ = CommImplType::SEND; /* Type of the communication (SEND or RECEIVE) */ + static unsigned next_id_; // Next ID to be given (for MC) + const unsigned id_ = ++next_id_; // ID of this comm (for MC) -- 0 as an ID denotes "invalid/unknown comm" + public: CommImpl() = default; @@ -51,7 +55,8 @@ public: double get_rate() const { return rate_; } MailboxImpl* get_mailbox() const { return mbox_; } - long get_mailbox_id() const { return mbox_id_; } + unsigned get_mailbox_id() const { return mbox_id_; } + unsigned get_id() const { return id_; } bool is_detached() const { return detached_; } bool is_assigned() const { return (to_ != nullptr && from_ != nullptr); } @@ -69,7 +74,6 @@ public: void suspend() override; void resume() override; void cancel() override; - void post() override; void set_exception(actor::ActorImpl* issuer) override; void finish() override; @@ -79,9 +83,10 @@ looking if a given communication matches my needs. For that, myself must match t expectations of the other side, too. See */ std::function copy_data_fun; - /* Surf action data */ - resource::Action* src_timeout_ = nullptr; /* Surf's actions to instrument the timeouts */ - resource::Action* dst_timeout_ = nullptr; /* Surf's actions to instrument the timeouts */ + /* Model actions */ + timeout_action_type src_timeout_{nullptr, [](resource::Action* a) { a->unref(); }}; /* timeout set by the sender */ + timeout_action_type dst_timeout_{nullptr, [](resource::Action* a) { a->unref(); }}; /* timeout set by the receiver */ + actor::ActorImplPtr src_actor_ = nullptr; actor::ActorImplPtr dst_actor_ = nullptr; @@ -90,11 +95,10 @@ expectations of the other side, too. See */ unsigned char* dst_buff_ = nullptr; size_t src_buff_size_ = 0; size_t* dst_buff_size_ = nullptr; + void* payload_ = nullptr; // If dst_buff_ is NULL, the default copy callback puts the data here void* src_data_ = nullptr; /* User data associated to the communication */ void* dst_data_ = nullptr; - static xbt::signal on_start; - static xbt::signal on_completion; }; } // namespace simgrid::kernel::activity