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.
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