diff --git a/drape_frontend/base_renderer.cpp b/drape_frontend/base_renderer.cpp index 90c8e9c7ed..9292eabe14 100644 --- a/drape_frontend/base_renderer.cpp +++ b/drape_frontend/base_renderer.cpp @@ -137,7 +137,8 @@ void BaseRenderer::ProcessStopRenderingMessage() bool BaseRenderer::CanReceiveMessages() { - return !m_selfThread.GetRoutine()->IsCancelled(); + threads::IRoutine * routine = m_selfThread.GetRoutine(); + return routine != nullptr && !routine->IsCancelled(); } } // namespace df diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index 2f2a813b81..3cc873cac0 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -82,15 +82,17 @@ DrapeEngine::DrapeEngine(Params && params) DrapeEngine::~DrapeEngine() { - // Call Teardown and reset pointers explicitly! We must wait for threads completion. + // Call Teardown explicitly! We must wait for threads completion. m_frontend->Teardown(); - m_frontend.reset(); - m_backend->Teardown(); - m_backend.reset(); + // Reset thread commutator, it stores BaseRenderer pointers. m_threadCommutator.reset(); + // Reset pointers to FrontendRenderer and BackendRenderer. + m_frontend.reset(); + m_backend.reset(); + gui::DrapeGui::Instance().Destroy(); m_textureManager->Release(); }