X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2558c8c0eb206ff353cb88672f5a90cd0e2562d3..a851f5dfed8bd7b708b0d5b426f95fc23c3a3a96:/src/kernel/activity/MailboxImpl.cpp diff --git a/src/kernel/activity/MailboxImpl.cpp b/src/kernel/activity/MailboxImpl.cpp index c7a8362c95..7be3b40fc8 100644 --- a/src/kernel/activity/MailboxImpl.cpp +++ b/src/kernel/activity/MailboxImpl.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2020. 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. */ @@ -64,7 +64,7 @@ void MailboxImpl::set_receiver(s4u::ActorPtr actor) */ void MailboxImpl::push(CommImplPtr comm) { - comm->mbox = this; + comm->set_mailbox(this); this->comm_queue_.push_back(std::move(comm)); } @@ -73,9 +73,10 @@ void MailboxImpl::push(CommImplPtr comm) */ void MailboxImpl::remove(const CommImplPtr& comm) { - xbt_assert(comm->mbox == this, "Comm %p is in mailbox %s, not mailbox %s", comm.get(), - (comm->mbox ? comm->mbox->get_cname() : "(null)"), this->get_cname()); - comm->mbox = nullptr; + xbt_assert(comm->get_mailbox() == this, "Comm %p is in mailbox %s, not mailbox %s", comm.get(), + (comm->get_mailbox() ? comm->get_mailbox()->get_cname() : "(null)"), this->get_cname()); + + comm->set_mailbox(nullptr); for (auto it = this->comm_queue_.begin(); it != this->comm_queue_.end(); it++) if (*it == comm) { this->comm_queue_.erase(it); @@ -84,7 +85,7 @@ void MailboxImpl::remove(const CommImplPtr& comm) xbt_die("Comm %p not found in mailbox %s", comm.get(), this->get_cname()); } -CommImplPtr MailboxImpl::iprobe(int type, int (*match_fun)(void*, void*, CommImpl*), void* data) +CommImplPtr MailboxImpl::iprobe(int type, bool (*match_fun)(void*, void*, CommImpl*), void* data) { XBT_DEBUG("iprobe from %p %p", this, &comm_queue_); @@ -121,7 +122,7 @@ CommImplPtr MailboxImpl::iprobe(int type, int (*match_fun)(void*, void*, CommImp * @param remove_matching whether or not to clean the found object from the queue * @return The communication activity if found, nullptr otherwise */ -CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, int (*match_fun)(void*, void*, CommImpl*), +CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, bool (*match_fun)(void*, void*, CommImpl*), void* this_user_data, const CommImplPtr& my_synchro, bool done, bool remove_matching) { @@ -129,7 +130,7 @@ CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, int (*match_fun auto& comm_queue = done ? done_comm_queue_ : comm_queue_; for (auto it = comm_queue.begin(); it != comm_queue.end(); it++) { - CommImplPtr& comm = *it; + const CommImplPtr& comm = *it; if (comm->type_ == CommImpl::Type::SEND) { other_user_data = comm->src_data_; @@ -140,9 +141,9 @@ CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, int (*match_fun (not comm->match_fun || comm->match_fun(other_user_data, this_user_data, my_synchro.get()))) { XBT_DEBUG("Found a matching communication synchro %p", comm.get()); #if SIMGRID_HAVE_MC - comm->mbox_cpy = comm->mbox; + comm->mbox_cpy = comm->get_mailbox(); #endif - comm->mbox = nullptr; + comm->set_mailbox(nullptr); CommImplPtr comm_cpy = comm; if (remove_matching) comm_queue.erase(it);