forked from qt-creator/qt-creator
TextEditor: Fix crash after request provider destruction
If an assist provider gets destructed while a code assist request is running we need to cancel the running request and reset the provider. Otherwise we might try to cast the deleted provider in CodeAssistantPrivate::isDestroyEvent. Which is called whenever the texteditor is changed. Fixes: QTCREATORBUG-31563 Change-Id: Iaec36c6ca73ba5e6795c1c3847da8b30fd446ffc Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -183,6 +183,8 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
|
|||||||
|
|
||||||
m_assistKind = kind;
|
m_assistKind = kind;
|
||||||
m_requestProvider = provider;
|
m_requestProvider = provider;
|
||||||
|
connect(
|
||||||
|
m_requestProvider, &QObject::destroyed, this, &CodeAssistantPrivate::cancelCurrentRequest);
|
||||||
IAssistProcessor *processor = provider->createProcessor(assistInterface.get());
|
IAssistProcessor *processor = provider->createProcessor(assistInterface.get());
|
||||||
processor->setAsyncCompletionAvailableHandler([this, reason, processor](
|
processor->setAsyncCompletionAvailableHandler([this, reason, processor](
|
||||||
IAssistProposal *newProposal) {
|
IAssistProposal *newProposal) {
|
||||||
@@ -367,6 +369,8 @@ void CodeAssistantPrivate::invalidateCurrentRequestData()
|
|||||||
{
|
{
|
||||||
m_processor = nullptr;
|
m_processor = nullptr;
|
||||||
m_requestProvider = nullptr;
|
m_requestProvider = nullptr;
|
||||||
|
disconnect(
|
||||||
|
m_requestProvider, &QObject::destroyed, this, &CodeAssistantPrivate::cancelCurrentRequest);
|
||||||
m_receivedContentWhileWaiting = false;
|
m_receivedContentWhileWaiting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user