From 0d244b0224334b5f113adbd6b24bc4ce8b66ae0a Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Mon, 15 May 2017 11:31:10 +0200 Subject: [PATCH] utility: Fixed message buffer might become empty while applying message filters --- src/lib/utility/messaging/MessageQueue.cpp | 10 +++++----- .../messaging/filter_types/MessageFilterFocusInOut.h | 5 +++++ .../filter_types/MessageFilterSearchAutocomplete.h | 5 +++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/lib/utility/messaging/MessageQueue.cpp b/src/lib/utility/messaging/MessageQueue.cpp index aacf2536..2195d41d 100644 --- a/src/lib/utility/messaging/MessageQueue.cpp +++ b/src/lib/utility/messaging/MessageQueue.cpp @@ -216,13 +216,13 @@ void MessageQueue::processMessages() { std::lock_guard lock(m_messageBufferMutex); - if (!m_messageBuffer.size()) - { - break; - } - for (std::shared_ptr filter : m_filters) { + if (!m_messageBuffer.size()) + { + break; + } + filter->filter(&m_messageBuffer); } diff --git a/src/lib/utility/messaging/filter_types/MessageFilterFocusInOut.h b/src/lib/utility/messaging/filter_types/MessageFilterFocusInOut.h index 159292bc..9d609a22 100644 --- a/src/lib/utility/messaging/filter_types/MessageFilterFocusInOut.h +++ b/src/lib/utility/messaging/filter_types/MessageFilterFocusInOut.h @@ -10,6 +10,11 @@ class MessageFilterFocusInOut { void filter(MessageQueue::MessageBufferType* messageBuffer) override { + if (messageBuffer->size() < 2) + { + return; + } + MessageBase* message = messageBuffer->front().get(); if (message->getType() == MessageFocusIn::getStaticType()) { diff --git a/src/lib/utility/messaging/filter_types/MessageFilterSearchAutocomplete.h b/src/lib/utility/messaging/filter_types/MessageFilterSearchAutocomplete.h index 0eb54271..47d7d7f0 100644 --- a/src/lib/utility/messaging/filter_types/MessageFilterSearchAutocomplete.h +++ b/src/lib/utility/messaging/filter_types/MessageFilterSearchAutocomplete.h @@ -9,6 +9,11 @@ class MessageFilterSearchAutocomplete { void filter(MessageQueue::MessageBufferType* messageBuffer) override { + if (messageBuffer->size() < 2) + { + return; + } + MessageBase* message = messageBuffer->front().get(); if (message->getType() == MessageSearchAutocomplete::getStaticType()) {