X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3f9b311ec56db95ec539001a860ae3c838c48312..365a83d3a1407923acccab758f9225e11408b5c6:/src/kernel/activity/MessageQueueImpl.cpp diff --git a/src/kernel/activity/MessageQueueImpl.cpp b/src/kernel/activity/MessageQueueImpl.cpp index 714f86bdd6..d649e6ee0b 100644 --- a/src/kernel/activity/MessageQueueImpl.cpp +++ b/src/kernel/activity/MessageQueueImpl.cpp @@ -13,6 +13,29 @@ namespace simgrid::kernel::activity { unsigned MessageQueueImpl::next_id_ = 0; +MessageQueueImpl::~MessageQueueImpl() +{ + try { + clear(); + } catch (const std::bad_alloc& ba) { + XBT_ERROR("MessageQueueImpl::clear() failure: %s", ba.what()); + } +} + +/** @brief Removes all message activities from a message queue */ +void MessageQueueImpl::clear() +{ + while (not queue_.empty()) { + auto mess = queue_.back(); + if (mess->get_state() == State::WAITING) { + mess->cancel(); + mess->set_state(State::FAILED); + } else + queue_.pop_back(); + } + xbt_assert(queue_.empty()); +} + void MessageQueueImpl::push(const MessImplPtr& mess) { mess->set_queue(this);