From cc8377064f41d3d8f9dc431a4d96af7aa4057523 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 16 Sep 2023 08:52:31 -0500 Subject: [PATCH 1/5] Fixing thread lifetime issues in Radar Product Manager --- scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 29bbc724..cbeb0fb0 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -102,7 +102,7 @@ public: self, &RadarProductManager::NewDataAvailable); } - ~ProviderManager() = default; + ~ProviderManager() { threadPool_.join(); }; std::string name() const; @@ -179,6 +179,8 @@ public: // Lock other mutexes before destroying, ensure loading is complete std::unique_lock loadLevel2DataLock {loadLevel2DataMutex_}; std::unique_lock loadLevel3DataLock {loadLevel3DataMutex_}; + + threadPool_.join(); } RadarProductManager* self_; From d58d3fc8e8f7d80154a2e7c34a06105de6ac34b7 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 18 Sep 2023 22:22:28 -0500 Subject: [PATCH 2/5] Fixing additional thread lifetime issues --- scwx-qt/source/scwx/qt/main/main_window.cpp | 2 +- scwx-qt/source/scwx/qt/manager/text_event_manager.cpp | 3 +++ scwx-qt/source/scwx/qt/map/map_widget.cpp | 2 ++ scwx-qt/source/scwx/qt/view/radar_product_view.cpp | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 225f439b..30fb76bf 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -117,7 +117,7 @@ public: settings_.setCacheDatabasePath(QString {cacheDbPath.c_str()}); settings_.setCacheDatabaseMaximumSize(20 * 1024 * 1024); } - ~MainWindowImpl() = default; + ~MainWindowImpl() { threadPool_.join(); } void AsyncSetup(); void ConfigureMapLayout(); diff --git a/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp b/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp index d44d4fb0..0ad34b9f 100644 --- a/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp @@ -48,6 +48,9 @@ public: { std::unique_lock lock(refreshMutex_); refreshTimer_.cancel(); + lock.unlock(); + + threadPool_.join(); } void HandleMessage(std::shared_ptr message); diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index cc35ef85..b42b4e3b 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -108,6 +108,8 @@ public: // Destroy ImGui Context model::ImGuiContextModel::Instance().DestroyContext(imGuiContextName_); + + threadPool_.join(); } void AddLayer(const std::string& id, diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp index 634efed3..934922e3 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp @@ -35,7 +35,7 @@ public: radarProductManager_ {radarProductManager} { } - ~RadarProductViewImpl() = default; + ~RadarProductViewImpl() { threadPool_.join(); } boost::asio::thread_pool threadPool_ {1}; From 0d0bdd4f8b52f4404247368bc1cdb4d7157c82ca Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 20 Sep 2023 23:49:38 -0500 Subject: [PATCH 3/5] Updating zone and county files for 19 September 2023 release Closes #64 --- data | 2 +- scwx-qt/scwx-qt.cmake | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/data b/data index 5d8ee283..9b6c72f8 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 5d8ee283b7dc34c433d8509c3cb85ca5e8cf0fbf +Subproject commit 9b6c72f847193bc29d3ff183b206f26a9b5c007e diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 96f125ee..3cae5e6c 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -235,11 +235,11 @@ set(JSON_FILES res/config/radar_sites.json) set(TS_FILES ts/scwx_en_US.ts) -set(COUNTY_DBF_FILES ${SCWX_DIR}/data/db/c_08mr23.dbf) -set(ZONE_DBF_FILES ${SCWX_DIR}/data/db/fz08mr23.dbf - ${SCWX_DIR}/data/db/mz08mr23.dbf +set(COUNTY_DBF_FILES ${SCWX_DIR}/data/db/c_19se23.dbf) +set(ZONE_DBF_FILES ${SCWX_DIR}/data/db/fz19se23.dbf + ${SCWX_DIR}/data/db/mz19se23.dbf ${SCWX_DIR}/data/db/oz08mr23.dbf - ${SCWX_DIR}/data/db/z_08mr23.dbf) + ${SCWX_DIR}/data/db/z_19se23.dbf) set(COUNTIES_SQLITE_DB ${scwx-qt_BINARY_DIR}/res/db/counties.db) set(VERSIONS_INPUT ${scwx-qt_SOURCE_DIR}/source/scwx/qt/main/versions.hpp.in) From aa0dab00a6fd5588bd3ea65e853d94f04d5459e7 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 20 Sep 2023 23:51:51 -0500 Subject: [PATCH 4/5] Add support for Composite Reflectivity (NCR) --- wxdata/source/scwx/common/products.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/wxdata/source/scwx/common/products.cpp b/wxdata/source/scwx/common/products.cpp index 391754ea..7e47712f 100644 --- a/wxdata/source/scwx/common/products.cpp +++ b/wxdata/source/scwx/common/products.cpp @@ -43,6 +43,7 @@ static const std::unordered_map level2Palette_ { {Level2Product::Unknown, "???"}}; static const std::unordered_map level3ProductCodeMap_ { + {37, "NCR"}, {56, "SRM"}, {94, "DR"}, {99, "DV"}, @@ -62,6 +63,7 @@ static const std::unordered_map {"DV", "Digital Velocity"}, {"SDR", "Super-Resolution Reflectivity"}, {"SDV", "Super-Resolution Velocity"}, + {"NCR", "Composite Reflectivity"}, {"DZD", "Digital Differential Reflectivity"}, {"DCC", "Digital Correlation Coefficient"}, {"DKD", "Digital Specific Differential Phase"}, @@ -76,8 +78,9 @@ static const std::unordered_map> level3AwipsProducts_ { // Reflectivity {"SDR", {"NXB", "NYB", "NZB", "N0B", "NAB", "N1B", "NBB", "N2B", "N3B"}}, - {"DR", {"NXQ", "NY", "NZQ", "N0Q", "NAQ", "N1Q", "NBQ", "N2Q", "N3Q"}}, + {"DR", {"NXQ", "NYQ", "NZQ", "N0Q", "NAQ", "N1Q", "NBQ", "N2Q", "N3Q"}}, {"TDR", {"TZ0", "TZ1", "TZ2"}}, + {"NCR", {"NCR"}}, // Velocity {"SDV", {"NXG", "NYG", "NZG", "N0G", "NAG", "N1G"}}, @@ -135,7 +138,7 @@ static const std::unordered_map static const std::unordered_map> level3CategoryProductList_ { - {Level3ProductCategory::Reflectivity, {"SDR", "DR", "TDR"}}, + {Level3ProductCategory::Reflectivity, {"SDR", "DR", "TDR", "NCR"}}, {Level3ProductCategory::Velocity, {"SDV", "DV", "TDV"}}, {Level3ProductCategory::StormRelativeVelocity, {"SRM"}}, {Level3ProductCategory::SpectrumWidth, {"SW"}}, From d7a3a3ca7b1186ebe834e5b2f22f86371ddff43b Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 20 Sep 2023 23:54:14 -0500 Subject: [PATCH 5/5] When changing products, the time managed by the Timeline Manager should be used --- scwx-qt/source/scwx/qt/main/main_window.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 30fb76bf..725bb2c0 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -176,6 +176,8 @@ public: std::vector maps_; std::vector elevationCuts_; + std::chrono::system_clock::time_point volumeTime_ {}; + bool elevationButtonsChanged_; bool resizeElevationButtons_; @@ -820,6 +822,7 @@ void MainWindowImpl::ConnectAnimationSignals() { for (auto map : maps_) { + volumeTime_ = dateTime; map->SelectTime(dateTime); } }); @@ -1009,8 +1012,7 @@ void MainWindowImpl::SelectRadarProduct(map::MapWidget* mapWidget, UpdateRadarProductSettings(); } - mapWidget->SelectRadarProduct( - group, productName, productCode, mapWidget->GetSelectedTime()); + mapWidget->SelectRadarProduct(group, productName, productCode, volumeTime_); } void MainWindowImpl::SetActiveMap(map::MapWidget* mapWidget)