Hold reference to radar product manager for duration of request

- Avoids early destruction and potential recursive mutex locking
This commit is contained in:
Dan Paulat 2024-05-24 22:47:22 -05:00
parent 2a12b603fc
commit 5caf0edf95
2 changed files with 10 additions and 7 deletions

View file

@ -1023,6 +1023,7 @@ void RadarProductManagerImpl::LoadNexradFile(
std::shared_ptr<wsr88d::NexradFile> nexradFile = load();
std::shared_ptr<types::RadarProductRecord> record = nullptr;
std::shared_ptr<RadarProductManager> manager = nullptr;
bool fileValid = (nexradFile != nullptr);
@ -1045,9 +1046,7 @@ void RadarProductManagerImpl::LoadNexradFile(
recordRadarId = request->current_radar_site();
}
std::shared_ptr<RadarProductManager> manager =
RadarProductManager::Instance(recordRadarId);
manager = RadarProductManager::Instance(recordRadarId);
manager->Initialize();
record = manager->p->StoreRadarProductRecord(record);
}

View file

@ -1,4 +1,5 @@
#include <scwx/qt/request/nexrad_file_request.hpp>
#include <scwx/qt/config/radar_site.hpp>
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<config::RadarSite> currentRadarSite_ {};
std::shared_ptr<types::RadarProductRecord> 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<types::RadarProductRecord>