From 6b1eb715eeab2d2f8cf7efdd08d3124a7dc8443d Mon Sep 17 00:00:00 2001 From: Denis Koronchik Date: Tue, 30 Sep 2014 12:19:03 +0300 Subject: [PATCH] [routing] Efficient usage of virtual memory --- routing/osrm_router.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/routing/osrm_router.cpp b/routing/osrm_router.cpp index 8a3b140cd6..7950756502 100644 --- a/routing/osrm_router.cpp +++ b/routing/osrm_router.cpp @@ -185,7 +185,6 @@ void OsrmRouter::CalculateRoute(m2::PointD const & startingPt, ReadyCallback con m_container.Open(fPath); - m_dataFacade.Load(m_container); m_mapping.Load(m_container); } catch (Reader::Exception const & e) @@ -226,10 +225,25 @@ void OsrmRouter::CalculateRoute(m2::PointD const & startingPt, ReadyCallback con return; } + try + { + m_mapping.Clear(); + m_dataFacade.Load(m_container); + } + catch(Reader::Exception const & e) + { + LOG(LERROR, ("Error while loading routing data:", fPath, e.Msg())); + resGuard.SetErrorMsg("Routing data absent or incorrect."); + return; + } + rawRoute.segment_end_coordinates.push_back(nodes); pathFinder({nodes}, {}, rawRoute); + // unmap routing data + m_dataFacade.Clear(); + if (INVALID_EDGE_WEIGHT == rawRoute.shortest_path_length || rawRoute.segment_end_coordinates.empty() || rawRoute.source_traversed_in_reverse.empty()) @@ -238,6 +252,17 @@ void OsrmRouter::CalculateRoute(m2::PointD const & startingPt, ReadyCallback con return; } + try + { + m_mapping.Load(m_container); + } + catch(Reader::Exception const & e) + { + LOG(LERROR, ("Error while loading routing index:", fPath, e.Msg())); + resGuard.SetErrorMsg("Routing index absent or incorrect."); + return; + } + // restore route vector points; for (auto i : osrm::irange(0, rawRoute.unpacked_path_segments.size()))