ProjectExplorer: Don't use dying RunControl

RunControlPrivate "detaches" from it's parent in the dtor by
disconnecting and setting q to nullptr, so we better check that.

Task-number: QTCREATORBUG-31801
Change-Id: Ic6f1a8cc3aa0e232c2db753b3ddd294a380d4b39
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2024-11-04 13:18:33 +01:00
parent 0b06fec6ba
commit f558810fd5

View File

@@ -1002,7 +1002,7 @@ void RunControlPrivate::onWorkerStopped(RunWorker *worker)
void RunControlPrivate::showError(const QString &msg)
{
if (!msg.isEmpty())
if (q && !msg.isEmpty())
q->postMessage(msg + '\n', ErrorMessageFormat);
}
@@ -1247,6 +1247,9 @@ void RunControlPrivate::startTaskTree()
void RunControlPrivate::checkAutoDeleteAndEmitStopped()
{
if (!q)
return;
if (autoDelete) {
debugMessage("All finished. Deleting myself");
q->deleteLater();
@@ -1356,7 +1359,8 @@ void RunControlPrivate::setState(RunControlState newState)
// Extra reporting.
switch (state) {
case RunControlState::Running:
emit q->started();
if (q)
emit q->started();
break;
case RunControlState::Stopped:
checkAutoDeleteAndEmitStopped();