From 807353e6028285cafeef60648b4dfbd8da18f0a6 Mon Sep 17 00:00:00 2001 From: Applin Date: Tue, 1 Oct 2024 11:29:33 +0100 Subject: [PATCH 1/3] Cancel running algorithm before destructing QtAlgorithmRunner Destructing the QtAlgorithmRunner without cancelling the algorithm currently running can cause a crash. --- qt/widgets/common/src/QtAlgorithmRunner.cpp | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/qt/widgets/common/src/QtAlgorithmRunner.cpp b/qt/widgets/common/src/QtAlgorithmRunner.cpp index 33c3f09c2144..1a78ff919e01 100644 --- a/qt/widgets/common/src/QtAlgorithmRunner.cpp +++ b/qt/widgets/common/src/QtAlgorithmRunner.cpp @@ -13,25 +13,12 @@ using namespace Mantid::API; namespace MantidQt::API { -//---------------------------------------------------------------------------------------------- -/** Constructor - */ QtAlgorithmRunner::QtAlgorithmRunner(QObject *parent) : QObject(parent), m_finishedObserver(*this, &QtAlgorithmRunner::handleAlgorithmFinishedNotification), m_progressObserver(*this, &QtAlgorithmRunner::handleAlgorithmProgressNotification), m_errorObserver(*this, &QtAlgorithmRunner::handleAlgorithmErrorNotification), m_asyncResult(nullptr) {} -//---------------------------------------------------------------------------------------------- -/** Destructor - */ -QtAlgorithmRunner::~QtAlgorithmRunner() { - if (m_asyncAlg) { - m_asyncAlg->removeObserver(m_finishedObserver); - m_asyncAlg->removeObserver(m_errorObserver); - m_asyncAlg->removeObserver(m_progressObserver); - } - delete m_asyncResult; -} +QtAlgorithmRunner::~QtAlgorithmRunner() { cancelRunningAlgorithm(); } //-------------------------------------------------------------------------------------- /** If an algorithm is already running, cancel it. From 26f5b52e215c3452539793a33eb04a81914128bb Mon Sep 17 00:00:00 2001 From: Applin Date: Tue, 1 Oct 2024 11:32:20 +0100 Subject: [PATCH 2/3] Add release note --- docs/source/release/v6.11.0/Inelastic/Bugfixes/38116.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/source/release/v6.11.0/Inelastic/Bugfixes/38116.rst diff --git a/docs/source/release/v6.11.0/Inelastic/Bugfixes/38116.rst b/docs/source/release/v6.11.0/Inelastic/Bugfixes/38116.rst new file mode 100644 index 000000000000..c76c8eba34d4 --- /dev/null +++ b/docs/source/release/v6.11.0/Inelastic/Bugfixes/38116.rst @@ -0,0 +1 @@ +- Fixed a crash on the :ref:`Inelastic Bayes Fitting ` when closing the interface while it is loading data. \ No newline at end of file From 2c791908ad1d05e82caee63f625878deccfcda83 Mon Sep 17 00:00:00 2001 From: Applin Date: Tue, 1 Oct 2024 13:00:57 +0100 Subject: [PATCH 3/3] Remove virtual for cancelRunningAlgorithm Makes sure that cancelRunningAlgorithm is not a virtual function because it is not required for testing (i.e. mocking), and we want to call this function from the QtAlgorithmRunner destructor. --- .../common/inc/MantidQtWidgets/Common/MockQtAlgorithmRunner.h | 1 - .../common/inc/MantidQtWidgets/Common/QtAlgorithmRunner.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/MockQtAlgorithmRunner.h b/qt/widgets/common/inc/MantidQtWidgets/Common/MockQtAlgorithmRunner.h index a6124962d62b..9a3183596ed0 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/MockQtAlgorithmRunner.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/MockQtAlgorithmRunner.h @@ -19,7 +19,6 @@ GNU_DIAG_OFF_SUGGEST_OVERRIDE class MockQtAlgorithmRunner : public QtAlgorithmRunner { public: MockQtAlgorithmRunner() = default; - MOCK_METHOD0(cancelRunningAlgorithm, void()); MOCK_METHOD1(startAlgorithmImpl, void(Mantid::API::IAlgorithm_sptr)); MOCK_CONST_METHOD0(getAlgorithm, Mantid::API::IAlgorithm_sptr()); diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/QtAlgorithmRunner.h b/qt/widgets/common/inc/MantidQtWidgets/Common/QtAlgorithmRunner.h index 80e4a5b30766..10be1df0681b 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/QtAlgorithmRunner.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/QtAlgorithmRunner.h @@ -36,7 +36,7 @@ class EXPORT_OPT_MANTIDQT_COMMON QtAlgorithmRunner : public QObject { explicit QtAlgorithmRunner(QObject *parent = nullptr); ~QtAlgorithmRunner() override; - virtual void cancelRunningAlgorithm(); + void cancelRunningAlgorithm(); virtual void startAlgorithm(Mantid::API::IAlgorithm_sptr alg); virtual Mantid::API::IAlgorithm_sptr getAlgorithm() const;