From 5caf0edf95500080b1974774698cc29e19cca997 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Fri, 24 May 2024 22:47:22 -0500 Subject: [PATCH] Hold reference to radar product manager for duration of request - Avoids early destruction and potential recursive mutex locking --- .../source/scwx/qt/manager/radar_product_manager.cpp | 7 +++---- scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp | 10 +++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) 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 ece8badb..e29f0801 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -1022,7 +1022,8 @@ void RadarProductManagerImpl::LoadNexradFile( std::shared_ptr nexradFile = load(); - std::shared_ptr record = nullptr; + std::shared_ptr record = nullptr; + std::shared_ptr manager = nullptr; bool fileValid = (nexradFile != nullptr); @@ -1045,9 +1046,7 @@ void RadarProductManagerImpl::LoadNexradFile( recordRadarId = request->current_radar_site(); } - std::shared_ptr manager = - RadarProductManager::Instance(recordRadarId); - + manager = RadarProductManager::Instance(recordRadarId); manager->Initialize(); record = manager->p->StoreRadarProductRecord(record); } diff --git a/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp b/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp index 42f0ab33..b2ab83aa 100644 --- a/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp +++ b/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp @@ -1,4 +1,5 @@ #include +#include namespace scwx { @@ -13,12 +14,15 @@ class NexradFileRequest::Impl { public: explicit Impl(const std::string& currentRadarSite) : - currentRadarSite_ {currentRadarSite} + currentRadarSiteId_ {currentRadarSite} { + // Hold shared pointer to radar site for duration of reqest + currentRadarSite_ = config::RadarSite::Get(currentRadarSite); } ~Impl() = default; - const std::string currentRadarSite_; + const std::string currentRadarSiteId_; + std::shared_ptr currentRadarSite_ {}; std::shared_ptr radarProductRecord_ {nullptr}; }; @@ -31,7 +35,7 @@ NexradFileRequest::~NexradFileRequest() = default; std::string NexradFileRequest::current_radar_site() const { - return p->currentRadarSite_; + return p->currentRadarSiteId_; } std::shared_ptr