diff --git a/routing/router_delegate.cpp b/routing/router_delegate.cpp index 80784539a4..80c1cac0f0 100644 --- a/routing/router_delegate.cpp +++ b/routing/router_delegate.cpp @@ -24,6 +24,20 @@ void RouterDelegate::SetPointCheckCallback(TPointCheckCallback const & pointCall m_pointCallback = pointCallback ? pointCallback : DefaultPointFn; } +void RouterDelegate::OnProgress(float progress) const +{ + lock_guard l(m_guard); + if (!IsCancelled()) + m_progressCallback(progress); +} + +void RouterDelegate::OnPointCheck(m2::PointD const & point) const +{ + lock_guard l(m_guard); + if (!IsCancelled()) + m_pointCallback(point); +} + TimeoutCancellable::TimeoutCancellable() : m_timeoutSec(0) { } diff --git a/routing/router_delegate.hpp b/routing/router_delegate.hpp index 42c892ad95..be87acbec4 100644 --- a/routing/router_delegate.hpp +++ b/routing/router_delegate.hpp @@ -6,6 +6,7 @@ #include "base/timer.hpp" #include "std/function.hpp" +#include "std/mutex.hpp" namespace routing { @@ -35,13 +36,16 @@ public: RouterDelegate(); /// Set routing progress. Waits current progress status from 0 to 100. - void OnProgress(float progress) const { if (!IsCancelled()) m_progressCallback(progress); } - void OnPointCheck(m2::PointD const & point) const { if (!IsCancelled()) m_pointCallback(point); } + void OnProgress(float progress) const; + void OnPointCheck(m2::PointD const & point) const; void SetProgressCallback(TProgressCallback const & progressCallback); void SetPointCheckCallback(TPointCheckCallback const & pointCallback); + void Reset() override {lock_guard l(m_guard); TimeoutCancellable::Reset();} + private: + mutable mutex m_guard; TProgressCallback m_progressCallback; TPointCheckCallback m_pointCallback; };