diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp index 098734ac..a0805bc7 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp @@ -8,6 +8,9 @@ #include #include +#include +#include + #include #include @@ -160,11 +163,13 @@ public: float latitude_; float longitude_; - float elevationCut_; + std::atomic elevationCut_; std::vector elevationCuts_; units::kilometers range_; uint16_t vcp_; + std::mutex elevationCutsMutex_ {}; + std::chrono::system_clock::time_point sweepTime_; std::shared_ptr colorTable_; @@ -368,6 +373,7 @@ std::string Level2ProductView::GetRadarProductName() const std::vector Level2ProductView::GetElevationCuts() const { + const std::unique_lock lock {p->elevationCutsMutex_}; return p->elevationCuts_; } @@ -565,11 +571,17 @@ void Level2ProductView::ComputeSweep() std::shared_ptr radarData; std::chrono::system_clock::time_point requestedTime {selected_time()}; types::RadarProductLoadStatus loadStatus {}; + + std::vector newElevationCuts {}; std::tie( - radarData, p->elevationCut_, p->elevationCuts_, std::ignore, loadStatus) = + radarData, p->elevationCut_, newElevationCuts, std::ignore, loadStatus) = radarProductManager->GetLevel2Data( p->dataBlockType_, p->selectedElevation_, requestedTime); + std::unique_lock elevationCutsLock {p->elevationCutsMutex_}; + p->elevationCuts_ = newElevationCuts; + elevationCutsLock.unlock(); + set_load_status(loadStatus); if (radarData == nullptr)