Copilot: avoid crash on misconfigured agent

When setting up a wrong or unusable agent.js the client used inside the
AuthWidget get's deleted eventually. In that case we need to reset the
tracked client otherwise we use a pointer to the deleted client in the
destructor of AuthWidget.

Change-Id: Ide4067c01cdcd05a33d44bc9460acfe9a56c7815
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io>
This commit is contained in:
David Schulz
2023-08-04 14:33:54 +02:00
parent 31f7ed44b6
commit fbb9946331

View File

@@ -95,14 +95,19 @@ void AuthWidget::updateClient(const Utils::FilePath &nodeJs, const Utils::FilePa
m_client = nullptr; m_client = nullptr;
setState(Tr::tr("Sign In"), false); setState(Tr::tr("Sign In"), false);
m_button->setEnabled(false); m_button->setEnabled(false);
if (!nodeJs.isExecutableFile() || !agent.exists()) { if (!nodeJs.isExecutableFile() || !agent.exists())
return; return;
}
setState(Tr::tr("Sign In"), true); setState(Tr::tr("Sign In"), true);
m_client = new CopilotClient(nodeJs, agent); m_client = new CopilotClient(nodeJs, agent);
connect(m_client, &Client::initialized, this, &AuthWidget::checkStatus); connect(m_client, &Client::initialized, this, &AuthWidget::checkStatus);
connect(m_client, &QObject::destroyed, this, [destroyedClient = m_client, this]() {
if (destroyedClient != m_client)
return;
m_client = nullptr;
m_progressIndicator->hide();
});
} }
void AuthWidget::signIn() void AuthWidget::signIn()