From 42ca9da221f93444a1414698bc2ebba913b54c7a Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Mon, 29 Dec 2014 14:35:02 +0300 Subject: [PATCH] Protecting callback which called from UI thread. --- map/routing_session.cpp | 4 +++- map/routing_session.hpp | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/map/routing_session.cpp b/map/routing_session.cpp index 776cff2b21..8138160de2 100644 --- a/map/routing_session.cpp +++ b/map/routing_session.cpp @@ -40,7 +40,7 @@ void RoutingSession::RebuildRoute(m2::PointD const & startPoint, TReadyCallbackF // Use old-style callback constraction, because lambda constructs buggy function on Android // (callback param isn't captured by value). - m_router->CalculateRoute(startPoint, DoReadyCallback(*this, callback), startPoint - m_lastGoodPosition); + m_router->CalculateRoute(startPoint, DoReadyCallback(*this, callback, m_routeSessionMutex), startPoint - m_lastGoodPosition); } void RoutingSession::DoReadyCallback::operator() (Route & route, IRouter::ResultCode e) @@ -50,6 +50,8 @@ void RoutingSession::DoReadyCallback::operator() (Route & route, IRouter::Result else m_rs.m_state = RouteNotReady; + threads::MutexGuard guard(m_routeSessionMutexInner); + UNUSED_VALUE(guard); m_callback(m_rs.m_route, e); } diff --git a/map/routing_session.hpp b/map/routing_session.hpp index e97e621aa5..647f47ff56 100644 --- a/map/routing_session.hpp +++ b/map/routing_session.hpp @@ -66,15 +66,15 @@ private: { RoutingSession & m_rs; TReadyCallbackFn m_callback; + threads::Mutex & m_routeSessionMutexInner; - DoReadyCallback(RoutingSession & rs, TReadyCallbackFn const & cb) - : m_rs(rs), m_callback(cb) + DoReadyCallback(RoutingSession & rs, TReadyCallbackFn const & cb, threads::Mutex & routeSessionMutex) + : m_rs(rs), m_callback(cb), m_routeSessionMutexInner(routeSessionMutex) { } void operator() (Route & route, IRouter::ResultCode e); }; - void AssignRoute(Route & route); private: