RunControl: Check autoDelete state on finish

Amends a5ecc6207b

Change-Id: I0a762fb41e00416f295f9d71cc23091799359f07
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2023-07-18 13:39:39 +02:00
parent 9338f7a4d7
commit 1042323e8c

View File

@@ -309,6 +309,7 @@ public:
bool supportsReRunning() const; bool supportsReRunning() const;
bool isUsingTaskTree() const { return bool(m_runRecipe); } bool isUsingTaskTree() const { return bool(m_runRecipe); }
void startTaskTree(); void startTaskTree();
void checkAutoDeleteAndEmitStopped();
RunControl *q; RunControl *q;
Id runMode; Id runMode;
@@ -445,7 +446,7 @@ void RunControl::initiateStop()
{ {
if (d->isUsingTaskTree()) { if (d->isUsingTaskTree()) {
d->m_taskTree.reset(); d->m_taskTree.reset();
emit stopped(); d->checkAutoDeleteAndEmitStopped();
} else { } else {
d->initiateStop(); d->initiateStop();
} }
@@ -1052,13 +1053,24 @@ void RunControlPrivate::startTaskTree()
connect(m_taskTree.get(), &TaskTree::started, q, &RunControl::started); connect(m_taskTree.get(), &TaskTree::started, q, &RunControl::started);
const auto finalize = [this] { const auto finalize = [this] {
m_taskTree.release()->deleteLater(); m_taskTree.release()->deleteLater();
emit q->stopped(); checkAutoDeleteAndEmitStopped();
}; };
connect(m_taskTree.get(), &TaskTree::done, this, finalize); connect(m_taskTree.get(), &TaskTree::done, this, finalize);
connect(m_taskTree.get(), &TaskTree::errorOccurred, this, finalize); connect(m_taskTree.get(), &TaskTree::errorOccurred, this, finalize);
m_taskTree->start(); m_taskTree->start();
} }
void RunControlPrivate::checkAutoDeleteAndEmitStopped()
{
if (autoDelete) {
debugMessage("All finished. Deleting myself");
q->deleteLater();
} else {
q->setApplicationProcessHandle(Utils::ProcessHandle());
}
emit q->stopped();
}
bool RunControl::isRunning() const bool RunControl::isRunning() const
{ {
if (d->isUsingTaskTree()) if (d->isUsingTaskTree())
@@ -1160,13 +1172,7 @@ void RunControlPrivate::setState(RunControlState newState)
emit q->started(); emit q->started();
break; break;
case RunControlState::Stopped: case RunControlState::Stopped:
if (autoDelete) { checkAutoDeleteAndEmitStopped();
debugMessage("All finished. Deleting myself");
q->deleteLater();
} else {
q->setApplicationProcessHandle(Utils::ProcessHandle());
}
emit q->stopped();
break; break;
default: default:
break; break;