From d95070104dedc6ad652a33e2107afe6708faab4a Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Wed, 9 Mar 2016 15:58:44 +0300 Subject: [PATCH] Fixed deadlock on entering background/foreground --- drape_frontend/base_renderer.cpp | 5 +++++ drape_frontend/base_renderer.hpp | 1 + drape_frontend/frontend_renderer.cpp | 4 +++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drape_frontend/base_renderer.cpp b/drape_frontend/base_renderer.cpp index 9292eabe14..1b363b43dc 100644 --- a/drape_frontend/base_renderer.cpp +++ b/drape_frontend/base_renderer.cpp @@ -59,6 +59,11 @@ void BaseRenderer::SetRenderingEnabled(bool const isEnabled) completionCondition.wait(lock, [¬ified] { return notified; }); } +bool BaseRenderer::IsRenderingEnabled() const +{ + return m_isEnabled; +} + void BaseRenderer::SetRenderingEnabled(bool const isEnabled, TCompletionHandler completionHandler) { if (isEnabled == m_isEnabled) diff --git a/drape_frontend/base_renderer.hpp b/drape_frontend/base_renderer.hpp index 4cc54cdd0b..58afbdd0a8 100644 --- a/drape_frontend/base_renderer.hpp +++ b/drape_frontend/base_renderer.hpp @@ -41,6 +41,7 @@ public: bool CanReceiveMessages(); void SetRenderingEnabled(bool const isEnabled); + bool IsRenderingEnabled() const; protected: ref_ptr m_commutator; diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index f4d8aa1b3e..7a6d81a431 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -1420,7 +1420,9 @@ void FrontendRenderer::Routine::Do() if (activityTimer.ElapsedSeconds() > kMaxInactiveSeconds) { // Process a message or wait for a message. - m_renderer.ProcessSingleMessage(); + // IsRenderingEnabled() can return false in case of rendering disabling and we must prevent + // possibility of infinity waiting in ProcessSingleMessage. + m_renderer.ProcessSingleMessage(m_renderer.IsRenderingEnabled()); activityTimer.Reset(); } else