From d9c26c2c6da245ac35b0bb3e68443cc7c3003eab Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 29 Jan 2026 09:40:11 +0100 Subject: [PATCH] Improve cleanup and signal disconnection on teardown Add explicit disconnection of signals and abort pending network replies in destructors and shutdown methods to prevent unwanted callbacks and threading issues during object destruction or shutdown. This enhances robustness and safety, especially in asynchronous and multi-threaded contexts. --- .../Application/Tools/Cloud/RiaCloudConnector.cpp | 10 ++++++++++ .../Application/Tools/Cloud/RiaOsduConnector.cpp | 11 +++++++++++ .../Tools/Telemetry/RiaOpenTelemetryManager.cpp | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/ApplicationLibCode/Application/Tools/Cloud/RiaCloudConnector.cpp b/ApplicationLibCode/Application/Tools/Cloud/RiaCloudConnector.cpp index e3e3d485f9..8285784bc2 100644 --- a/ApplicationLibCode/Application/Tools/Cloud/RiaCloudConnector.cpp +++ b/ApplicationLibCode/Application/Tools/Cloud/RiaCloudConnector.cpp @@ -133,6 +133,16 @@ RiaCloudConnector::RiaCloudConnector( QObject* parent, //-------------------------------------------------------------------------------------------------- RiaCloudConnector::~RiaCloudConnector() { + // Disconnect all signals to prevent callbacks during destruction + if ( m_authCodeFlow ) + { + m_authCodeFlow->disconnect(); + } + + if ( m_networkAccessManager ) + { + m_networkAccessManager->disconnect(); + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/Cloud/RiaOsduConnector.cpp b/ApplicationLibCode/Application/Tools/Cloud/RiaOsduConnector.cpp index 07bf835c72..cd64c8f900 100644 --- a/ApplicationLibCode/Application/Tools/Cloud/RiaOsduConnector.cpp +++ b/ApplicationLibCode/Application/Tools/Cloud/RiaOsduConnector.cpp @@ -54,6 +54,17 @@ RiaOsduConnector::RiaOsduConnector( QObject* parent, //-------------------------------------------------------------------------------------------------- RiaOsduConnector::~RiaOsduConnector() { + // Abort all pending network replies to prevent threading issues during destruction + QMutexLocker lock( &m_repliesMutex ); + for ( auto& [id, reply] : m_replies ) + { + if ( !reply.isNull() ) + { + reply->disconnect(); + reply->abort(); + } + } + m_replies.clear(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/Telemetry/RiaOpenTelemetryManager.cpp b/ApplicationLibCode/Application/Tools/Telemetry/RiaOpenTelemetryManager.cpp index e54b62d2d9..b36ce71eeb 100644 --- a/ApplicationLibCode/Application/Tools/Telemetry/RiaOpenTelemetryManager.cpp +++ b/ApplicationLibCode/Application/Tools/Telemetry/RiaOpenTelemetryManager.cpp @@ -184,6 +184,12 @@ void RiaOpenTelemetryManager::shutdown() m_healthTimer->stop(); } + // Disconnect network manager to prevent callbacks during shutdown + if ( m_networkAccessManager ) + { + m_networkAccessManager->disconnect(); + } + // Flush pending events flushPendingEvents();