From 20ec61117d07aac36be57b81054710603f2656ce Mon Sep 17 00:00:00 2001 From: Fabien Chaix Date: Wed, 18 May 2022 17:27:27 +0300 Subject: [PATCH] Fix mailbox::clear() to properly finish Comms --- src/kernel/activity/MailboxImpl.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/kernel/activity/MailboxImpl.cpp b/src/kernel/activity/MailboxImpl.cpp index c9d8c45004..88b2a08a13 100644 --- a/src/kernel/activity/MailboxImpl.cpp +++ b/src/kernel/activity/MailboxImpl.cpp @@ -4,6 +4,7 @@ * 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 @@ -69,21 +70,24 @@ void MailboxImpl::remove(const CommImplPtr& comm) */ void MailboxImpl::clear() { + // CommImpl::cancel() will remove the comm from the mailbox.. for (auto comm : done_comm_queue_) { comm->cancel(); - comm->set_state(State::DST_HOST_FAILURE); + comm->set_state(State::FAILED); + comm->post(); } done_comm_queue_.clear(); - // CommImpl::cancel() will remove the comm from the mailbox.. while (not comm_queue_.empty()) { auto comm = comm_queue_.back(); if (comm->get_state() == State::WAITING && not comm->is_detached()) { comm->cancel(); - comm->set_state(State::DST_HOST_FAILURE); + comm->set_state(State::FAILED); + comm->post(); } else comm_queue_.pop_back(); } + xbt_assert(comm_queue_.empty() && done_comm_queue_.empty()); } CommImplPtr MailboxImpl::iprobe(int type, const std::function& match_fun, void* data) -- 2.20.1