From 4093fbe8266ce09dac9948b252724043dcc1905d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 4 Apr 2022 14:31:21 +0200 Subject: [PATCH] Don't delete process directly from process' finished handler AbstractProcessStep::slotProcessFinished() slot is connected to m_process finished() signal. We call there AbstractProcessStep::Private::cleanUp(), and that calls m_process.reset(), so it invokes m_process d'tor directly. SshRemoteProcessRunner::handleProcessFinished() slot is connected to d->m_process finished() signal. We call there SshRemoteProcessRunner::setState(), and that calls d->m_process.reset(), so it invokes m_process d'tor directly. Delete later m_process instead in both cases. Change-Id: I4a0f2a631b676b57e8bcc3a7878620bc76dc74de Reviewed-by: Christian Stenger --- src/libs/ssh/sshremoteprocessrunner.cpp | 2 +- src/plugins/projectexplorer/abstractprocessstep.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libs/ssh/sshremoteprocessrunner.cpp b/src/libs/ssh/sshremoteprocessrunner.cpp index 617ffc000c4..0bf337917be 100644 --- a/src/libs/ssh/sshremoteprocessrunner.cpp +++ b/src/libs/ssh/sshremoteprocessrunner.cpp @@ -161,7 +161,7 @@ void SshRemoteProcessRunner::setState(int newState) d->m_state = static_cast(newState); if (d->m_state == Inactive) { if (d->m_process) - d->m_process.reset(); + d->m_process.release()->deleteLater(); if (d->m_connection) { disconnect(d->m_connection, nullptr, this, nullptr); SshConnectionManager::releaseConnection(d->m_connection); diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 0088fcd9fbe..a08fbe22d61 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -286,7 +286,8 @@ void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus st const bool returnValue = q->processSucceeded(exitCode, status) || m_ignoreReturnValue; - m_process.reset(); + if (m_process) + m_process.release()->deleteLater(); // Report result q->finish(returnValue);