From ad7de40a9db79f3acbfae96dfd4cdd33346337d3 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 17 Jun 2024 17:30:19 +0200 Subject: [PATCH] IosToolTaskAdapter: Don't leak the IosToolHandler on destruction The TaskAdapter may be destructed at any point in time, even when the task is still running (i.e. when the task tree was canceled). Make sure the internal IosToolHandler gets deleted in this case. Amends 150441bf88177f6c2325d832b44c8ec82ab73352 Change-Id: I1ae4d324390c38d4faf9ec32f83c66295ed18532 Reviewed-by: Eike Ziller --- src/plugins/ios/iostoolhandler.cpp | 8 ++++---- src/plugins/ios/iostoolhandler.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp index 420e119e741..0626a552533 100644 --- a/src/plugins/ios/iostoolhandler.cpp +++ b/src/plugins/ios/iostoolhandler.cpp @@ -992,12 +992,12 @@ IosToolTaskAdapter::IosToolTaskAdapter() {} void IosToolTaskAdapter::start() { - task()->m_iosToolHandler = new IosToolHandler(Internal::IosDeviceType(task()->m_deviceType)); - connect(task()->m_iosToolHandler, &IosToolHandler::finished, this, [this] { - task()->m_iosToolHandler->deleteLater(); + task()->m_iosToolHandler.reset(new IosToolHandler(Internal::IosDeviceType(task()->m_deviceType))); + connect(task()->m_iosToolHandler.get(), &IosToolHandler::finished, this, [this] { + task()->m_iosToolHandler.release()->deleteLater(); emit done(Tasking::DoneResult::Success); }); - task()->m_startHandler(task()->m_iosToolHandler); + task()->m_startHandler(task()->m_iosToolHandler.get()); } } // namespace Ios diff --git a/src/plugins/ios/iostoolhandler.h b/src/plugins/ios/iostoolhandler.h index 33d413e3cfc..3f81fded81d 100644 --- a/src/plugins/ios/iostoolhandler.h +++ b/src/plugins/ios/iostoolhandler.h @@ -82,7 +82,7 @@ public: private: friend class IosToolTaskAdapter; - IosToolHandler *m_iosToolHandler = nullptr; + std::unique_ptr m_iosToolHandler; StartHandler m_startHandler; Internal::IosDeviceType m_deviceType = Internal::IosDeviceType::IosDevice; };