From b4cc6b140b6b2b0a21eb5539176a20d39455895a Mon Sep 17 00:00:00 2001 From: Viktor Govako Date: Sun, 26 Jun 2022 17:33:57 +0300 Subject: [PATCH] Fixed races. Signed-off-by: Viktor Govako --- topography_generator/generator.cpp | 7 ++++--- topography_generator/generator.hpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/topography_generator/generator.cpp b/topography_generator/generator.cpp index 0f59fb3cb..95a10e0cc 100644 --- a/topography_generator/generator.cpp +++ b/topography_generator/generator.cpp @@ -700,9 +700,8 @@ void Generator::InitCountryInfoGetter(std::string const & dataDir) GetPlatform().SetResourceDir(dataDir); - m_infoGetter = storage::CountryInfoReader::CreateCountryInfoReader(GetPlatform()); - CHECK(m_infoGetter, ()); - m_infoReader = static_cast(m_infoGetter.get()); + m_infoReader = storage::CountryInfoReader::CreateCountryInfoReader(GetPlatform()); + CHECK(m_infoReader, ()); } void Generator::InitProfiles(std::string const & isolinesProfilesFileName, @@ -767,6 +766,8 @@ void Generator::GetCountryRegions(storage::CountryId const & countryId, m2::Rect } CHECK_LESS(id, m_infoReader->GetCountries().size(), ()); + /// @todo Refactor using Memory[Mapped] reader for countries. + std::lock_guard guard(m_infoMutex); m_infoReader->LoadRegionsFromDisk(id, countryRegions); } } // namespace topography_generator diff --git a/topography_generator/generator.hpp b/topography_generator/generator.hpp index 6a92aae0f..f131e735e 100644 --- a/topography_generator/generator.hpp +++ b/topography_generator/generator.hpp @@ -91,8 +91,8 @@ private: ProfileToTileIsolinesParams m_profileToTileParams; ProfileToIsolinesPackingParams m_profileToPackingParams; - std::unique_ptr m_infoGetter; - storage::CountryInfoReader * m_infoReader = nullptr; + std::mutex m_infoMutex; + std::unique_ptr m_infoReader; // They can't be negative, it is done to avoid compiler warnings. long m_threadsCount;