diff --git a/routing/cross_mwm_router.cpp b/routing/cross_mwm_router.cpp index 83e585f936..e1a75cfa60 100644 --- a/routing/cross_mwm_router.cpp +++ b/routing/cross_mwm_router.cpp @@ -60,6 +60,8 @@ IRouter::ResultCode CalculateCrossMwmPath(TRoutingNodes const & startGraphNodes, startGraphNode = start; break; } + if (delegate.IsCancelled()) + return IRouter::Cancelled; } if (code != IRouter::NoError) return IRouter::StartPointNotFound; @@ -76,6 +78,8 @@ IRouter::ResultCode CalculateCrossMwmPath(TRoutingNodes const & startGraphNodes, finalGraphNode = final; break; } + if (delegate.IsCancelled()) + return IRouter::Cancelled; } if (code != IRouter::NoError) return IRouter::EndPointNotFound; @@ -86,6 +90,8 @@ IRouter::ResultCode CalculateCrossMwmPath(TRoutingNodes const & startGraphNodes, delegate); if (code != IRouter::NoError) return code; + if (delegate.IsCancelled()) + return IRouter::Cancelled; // Final path conversion to output type. ConvertToSingleRouterTasks(tempRoad, startGraphNode, finalGraphNode, route); diff --git a/routing/osrm_router.cpp b/routing/osrm_router.cpp index f60ca81752..97a425da37 100644 --- a/routing/osrm_router.cpp +++ b/routing/osrm_router.cpp @@ -631,6 +631,7 @@ OsrmRouter::ResultCode OsrmRouter::CalculateRoute(m2::PointD const & startPoint, ResultCode code = CalculateCrossMwmPath(startTask, m_cachedTargets, m_indexManager, delegate, finalPath); timer.Reset(); + INTERRUPT_WHEN_CANCELLED(delegate); delegate.OnProgress(kCrossPathFoundProgress); // 5. Make generate answer diff --git a/routing/router_delegate.hpp b/routing/router_delegate.hpp index f2373c816e..42c892ad95 100644 --- a/routing/router_delegate.hpp +++ b/routing/router_delegate.hpp @@ -35,8 +35,8 @@ public: RouterDelegate(); /// Set routing progress. Waits current progress status from 0 to 100. - void OnProgress(float progress) const { m_progressCallback(progress); } - void OnPointCheck(m2::PointD const & point) const { m_pointCallback(point); } + void OnProgress(float progress) const { if (!IsCancelled()) m_progressCallback(progress); } + void OnPointCheck(m2::PointD const & point) const { if (!IsCancelled()) m_pointCallback(point); } void SetProgressCallback(TProgressCallback const & progressCallback); void SetPointCheckCallback(TPointCheckCallback const & pointCallback);