forked from qt-creator/qt-creator
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:
@@ -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()
|
||||||
|
Reference in New Issue
Block a user