diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp index c166b1ce..a6ce5221 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -24,6 +24,9 @@ namespace manager static const std::string logPrefix_ = "[scwx::qt::manager::radar_product_manager] "; +typedef std::function()> + CreateNexradFileFunction; + static constexpr uint32_t NUM_RADIAL_GATES_0_5_DEGREE = common::MAX_0_5_DEGREE_RADIALS * common::MAX_DATA_MOMENT_GATES; static constexpr uint32_t NUM_RADIAL_GATES_1_DEGREE = @@ -59,6 +62,10 @@ public: void StoreRadarProductRecord(std::shared_ptr record); + static void + LoadNexradFile(CreateNexradFileFunction load, + std::shared_ptr request); + std::string radarId_; bool initialized_; @@ -70,8 +77,6 @@ public: std::map> level2VolumeScans_; - - std::mutex fileLoadMutex_; }; RadarProductManager::RadarProductManager(const std::string& radarId) : @@ -208,21 +213,23 @@ void RadarProductManager::Initialize() void RadarProductManager::LoadData( std::istream& is, std::shared_ptr request) { - LoadNexradFile([=, &is]() -> std::shared_ptr - { return wsr88d::NexradFileFactory::Create(is); }, - request); + RadarProductManagerImpl::LoadNexradFile( + [=, &is]() -> std::shared_ptr + { return wsr88d::NexradFileFactory::Create(is); }, + request); } void RadarProductManager::LoadFile( const std::string& filename, std::shared_ptr request) { - LoadNexradFile([=]() -> std::shared_ptr - { return wsr88d::NexradFileFactory::Create(filename); }, - request); + RadarProductManagerImpl::LoadNexradFile( + [=]() -> std::shared_ptr + { return wsr88d::NexradFileFactory::Create(filename); }, + request); } -void RadarProductManager::LoadNexradFile( +void RadarProductManagerImpl::LoadNexradFile( CreateNexradFileFunction load, std::shared_ptr request) { @@ -307,7 +314,7 @@ RadarProductManager::GetLevel2Data(wsr88d::rda::DataBlockType dataBlockType, scwx::util::async( [&]() { - std::lock_guard guard(p->fileLoadMutex_); + std::unique_lock lock(fileLoadMutex_); BOOST_LOG_TRIVIAL(debug) << logPrefix_ << "Start load"; diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp index a079cc4f..120ff673 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp @@ -59,14 +59,9 @@ signals: void Level2DataLoaded(); private: - typedef std::function()> - CreateNexradFileFunction; - - static void - LoadNexradFile(CreateNexradFileFunction load, - std::shared_ptr request); - std::unique_ptr p; + + friend class RadarProductManagerImpl; }; } // namespace manager