diff options
author | vng <viktor.govako@gmail.com> | 2012-10-18 03:36:15 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:45:47 +0300 |
commit | 2f2c977dc8430eb3c61a703b2eb35c23a835e2d8 (patch) | |
tree | 5f64bbf86639814c11a778fec3f15502c1eec518 /search | |
parent | a28abafa3389e413a90f8108ae52f35ef8371ba6 (diff) |
Fix concurrent issue in read/write of search params.
Diffstat (limited to 'search')
-rw-r--r-- | search/search_engine.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/search/search_engine.cpp b/search/search_engine.cpp index 50465cb20f..d8b149822e 100644 --- a/search/search_engine.cpp +++ b/search/search_engine.cpp @@ -142,24 +142,25 @@ void Engine::PrepareSearch(m2::RectD const & viewport, bool Engine::Search(SearchParams const & params, m2::RectD const & viewport) { - // Check for equal query. - if (!params.IsResetMode() && - m_params.IsEqualCommon(params) && - m2::IsEqual(m_viewport, viewport, epsEqualRects, epsEqualRects)) { - if (!m_params.m_validPos) - return false; + threads::MutexGuard guard(m_updateMutex); - m2::PointD const p1 = GetViewportXY(m_params.m_lat, m_params.m_lon); - m2::PointD const p2 = GetViewportXY(params.m_lat, params.m_lon); + // Check for equal query. + if (!params.IsResetMode() && + m_params.IsEqualCommon(params) && + m2::IsEqual(m_viewport, viewport, epsEqualRects, epsEqualRects)) + { + if (!m_params.m_validPos) + return false; - if (p1.EqualDxDy(p2, epsEqualPoints)) - return false; - } + m2::PointD const p1 = GetViewportXY(m_params.m_lat, m_params.m_lon); + m2::PointD const p2 = GetViewportXY(params.m_lat, params.m_lon); + + if (p1.EqualDxDy(p2, epsEqualPoints)) + return false; + } - { // Assign new search params. - threads::MutexGuard guard(m_updateMutex); m_params = params; m_viewport = viewport; } |