From a8568d24f6025e573636324bf70430c2e673a2fd Mon Sep 17 00:00:00 2001 From: AdenKoperczak Date: Wed, 12 Mar 2025 13:00:56 -0400 Subject: [PATCH] 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: