Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/search
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2012-10-18 03:36:15 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:45:47 +0300
commit2f2c977dc8430eb3c61a703b2eb35c23a835e2d8 (patch)
tree5f64bbf86639814c11a778fec3f15502c1eec518 /search
parenta28abafa3389e413a90f8108ae52f35ef8371ba6 (diff)
Fix concurrent issue in read/write of search params.
Diffstat (limited to 'search')
-rw-r--r--search/search_engine.cpp27
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;
}