Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix Comm::get_sender()
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 30 Mar 2020 10:39:50 +0000 (12:39 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 30 Mar 2020 10:39:50 +0000 (12:39 +0200)
Matching sender and receiving modifies the CommImpl fields used to
store the sending and receiving actors, not those in Comm. Then to
know the sender on the receiving side one have to look at the kernel
level.

src/s4u/s4u_Comm.cpp

index b27c782..3b192c3 100644 (file)
@@ -249,7 +249,12 @@ Mailbox* Comm::get_mailbox() const
 
 Actor* Comm::get_sender() const
 {
-  return sender_ ? sender_->ciface() : nullptr;
+  return kernel::actor::simcall([this] {
+    kernel::actor::ActorImplPtr sender = nullptr;
+    if (pimpl_)
+      sender = boost::static_pointer_cast<kernel::activity::CommImpl>(pimpl_)->src_actor_;
+    return sender ? sender->ciface() : nullptr;
+  });
 }
 
 } // namespace s4u