From 6d7013a8313075c3ee385cd0f0d4346c4dbb57fb Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Tue, 17 Mar 2015 17:19:23 +0300 Subject: [PATCH] Fixed adding messages to queues after clean up --- drape_frontend/base_renderer.cpp | 7 ++++++- drape_frontend/base_renderer.hpp | 3 +++ drape_frontend/message_acceptor.cpp | 3 ++- drape_frontend/message_acceptor.hpp | 1 + drape_frontend/message_subclasses.hpp | 4 ++-- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drape_frontend/base_renderer.cpp b/drape_frontend/base_renderer.cpp index 771f065c7b..e427691c78 100644 --- a/drape_frontend/base_renderer.cpp +++ b/drape_frontend/base_renderer.cpp @@ -123,8 +123,13 @@ void BaseRenderer::WakeUp() void BaseRenderer::ProcessStopRenderingMessage() { - CloseQueue(); IRoutine::Cancel(); + CloseQueue(); +} + +bool BaseRenderer::CanReceiveMessage() +{ + return !IsCancelled(); } } // namespace df diff --git a/drape_frontend/base_renderer.hpp b/drape_frontend/base_renderer.hpp index 53446748df..21e7d81e2c 100644 --- a/drape_frontend/base_renderer.hpp +++ b/drape_frontend/base_renderer.hpp @@ -35,6 +35,9 @@ protected: void CheckRenderingEnabled(); void ProcessStopRenderingMessage(); +private: + bool CanReceiveMessage() override; + private: threads::Thread m_selfThread; ThreadsCommutator::ThreadName m_threadName; diff --git a/drape_frontend/message_acceptor.cpp b/drape_frontend/message_acceptor.cpp index 2f78106a89..4b05f104f3 100644 --- a/drape_frontend/message_acceptor.cpp +++ b/drape_frontend/message_acceptor.cpp @@ -18,7 +18,8 @@ void MessageAcceptor::ProcessSingleMessage(unsigned maxTimeWait) void MessageAcceptor::PostMessage(dp::TransferPointer message, MessagePriority priority) { - m_messageQueue.PushMessage(message, priority); + if (CanReceiveMessage()) + m_messageQueue.PushMessage(message, priority); } void MessageAcceptor::CloseQueue() diff --git a/drape_frontend/message_acceptor.hpp b/drape_frontend/message_acceptor.hpp index f5e2fbf8a5..147a9c99b0 100644 --- a/drape_frontend/message_acceptor.hpp +++ b/drape_frontend/message_acceptor.hpp @@ -18,6 +18,7 @@ protected: virtual ~MessageAcceptor(){} virtual void AcceptMessage(dp::RefPointer message) = 0; + virtual bool CanReceiveMessage() = 0; /// Must be called by subclass on message target thread void ProcessSingleMessage(unsigned maxTimeWait = -1); diff --git a/drape_frontend/message_subclasses.hpp b/drape_frontend/message_subclasses.hpp index 147d8e03aa..d4f076f469 100644 --- a/drape_frontend/message_subclasses.hpp +++ b/drape_frontend/message_subclasses.hpp @@ -107,8 +107,8 @@ class UpdateReadManagerMessage : public Message { public: UpdateReadManagerMessage(ScreenBase const & screen, set const & tiles) - : m_screen(screen) - , m_tiles(tiles) + : m_tiles(tiles) + , m_screen(screen) {} Type GetType() const override { return Message::UpdateReadManager; }