From a8568d24f6025e573636324bf70430c2e673a2fd Mon Sep 17 00:00:00 2001 From: AdenKoperczak Date: Wed, 12 Mar 2025 13:00:56 -0400 Subject: [PATCH 1/2] Fix AlertLayer circular reference --- scwx-qt/source/scwx/qt/map/alert_layer.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/scwx-qt/source/scwx/qt/map/alert_layer.cpp b/scwx-qt/source/scwx/qt/map/alert_layer.cpp index 5ed4e458..d7e8b029 100644 --- a/scwx-qt/source/scwx/qt/map/alert_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/alert_layer.cpp @@ -157,8 +157,8 @@ public: const std::shared_ptr& segmentRecord); void ConnectAlertHandlerSignals(); void ConnectSignals(); - void HandleGeoLinesEvent(std::shared_ptr& di, - QEvent* ev); + void HandleGeoLinesEvent(std::weak_ptr& di, + QEvent* ev); void HandleGeoLinesHover(std::shared_ptr& di, const QPointF& mouseGlobalPos); void ScheduleRefresh(); @@ -633,11 +633,12 @@ void AlertLayer::Impl::AddLine(std::shared_ptr& geoLines, std::placeholders::_1, std::placeholders::_2)); + std::weak_ptr diWeak = di; gl::draw::GeoLines::RegisterEventHandler( di, std::bind(&AlertLayer::Impl::HandleGeoLinesEvent, this, - di, + diWeak, std::placeholders::_1)); } } @@ -691,8 +692,14 @@ void AlertLayer::Impl::UpdateLines() } void AlertLayer::Impl::HandleGeoLinesEvent( - std::shared_ptr& di, QEvent* ev) + std::weak_ptr& diWeak, QEvent* ev) { + std::shared_ptr di = diWeak.lock(); + if (di == nullptr) + { + return; + } + switch (ev->type()) { case QEvent::Type::MouseButtonPress: From f82ed0d9d4c3f18077e7591299c83d8793adcf50 Mon Sep 17 00:00:00 2001 From: AdenKoperczak Date: Wed, 12 Mar 2025 13:10:03 -0400 Subject: [PATCH 2/2] Clang tidy/format fixes for fix_AlertLayer_circular_reference --- scwx-qt/source/scwx/qt/map/alert_layer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scwx-qt/source/scwx/qt/map/alert_layer.cpp b/scwx-qt/source/scwx/qt/map/alert_layer.cpp index d7e8b029..b05084c9 100644 --- a/scwx-qt/source/scwx/qt/map/alert_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/alert_layer.cpp @@ -633,7 +633,7 @@ void AlertLayer::Impl::AddLine(std::shared_ptr& geoLines, std::placeholders::_1, std::placeholders::_2)); - std::weak_ptr diWeak = di; + const std::weak_ptr diWeak = di; gl::draw::GeoLines::RegisterEventHandler( di, std::bind(&AlertLayer::Impl::HandleGeoLinesEvent, @@ -694,7 +694,7 @@ void AlertLayer::Impl::UpdateLines() void AlertLayer::Impl::HandleGeoLinesEvent( std::weak_ptr& diWeak, QEvent* ev) { - std::shared_ptr di = diWeak.lock(); + const std::shared_ptr di = diWeak.lock(); if (di == nullptr) { return;