X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/519fc4af194190fc8092d801d51b2fd83d35845e..8d0b1f2f1840a16bb9551f1cfd74f2488599f95b:/src/kernel/activity/MailboxImpl.cpp diff --git a/src/kernel/activity/MailboxImpl.cpp b/src/kernel/activity/MailboxImpl.cpp index 7ee160c332..aaeeb83dc4 100644 --- a/src/kernel/activity/MailboxImpl.cpp +++ b/src/kernel/activity/MailboxImpl.cpp @@ -1,10 +1,9 @@ -/* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2023. 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. */ #include "src/kernel/activity/MailboxImpl.hpp" -#include "simgrid/msg.h" #include "src/kernel/activity/CommImpl.hpp" #include @@ -21,7 +20,11 @@ unsigned MailboxImpl::next_id_ = 0; MailboxImpl::~MailboxImpl() { - clear(false); + try { + clear(false); + } catch (const std::bad_alloc& ba) { + XBT_ERROR("MailboxImpl::clear() failure: %s", ba.what()); + } set_receiver(nullptr); } @@ -43,7 +46,7 @@ void MailboxImpl::set_receiver(s4u::ActorPtr actor) /** @brief Pushes a communication activity into a mailbox * @param comm What to add */ -void MailboxImpl::push(CommImplPtr comm) +void MailboxImpl::push(const CommImplPtr& comm) { comm->set_mailbox(this); this->comm_queue_.push_back(std::move(comm)); @@ -58,24 +61,23 @@ void MailboxImpl::remove(const CommImplPtr& comm) (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); - return; - } - xbt_die("Comm %p not found in mailbox %s", comm.get(), this->get_cname()); + auto it = std::find(this->comm_queue_.begin(), this->comm_queue_.end(), comm); + if (it != this->comm_queue_.end()) + this->comm_queue_.erase(it); + else + xbt_die("Comm %p not found in mailbox %s", comm.get(), this->get_cname()); } /** @brief Removes all communication activities from a mailbox */ -void MailboxImpl::clear( bool do_post ) +void MailboxImpl::clear(bool do_finish) { // CommImpl::cancel() will remove the comm from the mailbox.. - for (auto comm : done_comm_queue_) { + for (const auto& comm : done_comm_queue_) { comm->cancel(); comm->set_state(State::FAILED); - if(do_post) - comm->post(); + if (do_finish) + comm->finish(); } done_comm_queue_.clear(); @@ -84,8 +86,8 @@ void MailboxImpl::clear( bool do_post ) if (comm->get_state() == State::WAITING && not comm->is_detached()) { comm->cancel(); comm->set_state(State::FAILED); - if(do_post) - comm->post(); + if (do_finish) + comm->finish(); } else comm_queue_.pop_back(); }