From cad73e4f1adcaf1d66722ab0069416b7ed61659b Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 16 Oct 2023 07:55:57 +0200 Subject: [PATCH] LanguageClient: avoid assert on init response Fixes: QTCREATORBUG-29748 Change-Id: I6b86906f302be6e0eb3a89eaf851f7231bf78586 Reviewed-by: Jarek Kobus --- src/plugins/languageclient/client.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 6c6098be215..2fcfc0210fc 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -537,7 +537,7 @@ void Client::initialize() else params.setWorkSpaceFolders(workspaces); InitializeRequest initRequest(params); - initRequest.setResponseCallback([this](const InitializeRequest::Response &initResponse){ + initRequest.setResponseCallback([this](const InitializeRequest::Response &initResponse) { d->initializeCallback(initResponse); }); if (std::optional responseHandler = initRequest.responseHandler()) @@ -2105,7 +2105,11 @@ void Client::setDocumentChangeUpdateThreshold(int msecs) void ClientPrivate::initializeCallback(const InitializeRequest::Response &initResponse) { - QTC_ASSERT(m_state == Client::InitializeRequested, return); + if (m_state != Client::InitializeRequested) { + qCWarning(LOGLSPCLIENT) << "Dropping initialize response in unexpected state " << m_state; + qCDebug(LOGLSPCLIENT) << initResponse.toJsonObject(); + return; + } if (std::optional> error = initResponse.error()) { if (std::optional data = error->data()) { if (data->retry()) {