Skip to content

Language service hangs after custom provider times out #13862

@HampusAdolfsson

Description

@HampusAdolfsson

Environment

  • OS and Version: Windows 11 version 10.0.22631
  • VS Code Version: 1.103.1
  • C/C++ Extension Version: 1.26.3

Bug Summary and Steps to Reproduce

Bug Summary: When using a custom configuration provider for intellisense and the provider hits the two second timeout for providing a configuration for a file, the C/C++ language service sometimes hangs. In this state, it doesn't respond to LSP requests (e.g. hovering a symbol shows "Loading..." forever), running C/C++: Log Diagnostics does nothing and the Language Status popup shows as parsing indefinitely:

Image

Steps to reproduce:

I can reproduce the issue with this sample configuration provider:

import { dirname } from 'path'; import * as vscode from 'vscode'; import { CppToolsApi, Version, CustomConfigurationProvider, getCppToolsApi, SourceFileConfigurationItem, WorkspaceBrowseConfiguration } from 'vscode-cpptools'; let api: CppToolsApi | undefined = undefined; export async function activate(context: vscode.ExtensionContext) { api = await getCppToolsApi(Version.v2); const provider = new Provider(); if (api) { if (api.notifyReady) { api.registerCustomConfigurationProvider(provider); api.notifyReady(provider); } } } export function deactivate() { api?.dispose(); } class Provider implements CustomConfigurationProvider { name: string = "cpptools-provider"; extensionId: string = "cpptools-provider"; canProvideConfiguration(uri: vscode.Uri, token?: vscode.CancellationToken): Thenable<boolean> { return Promise.resolve(true); } async provideConfigurations(uris: vscode.Uri[], token?: vscode.CancellationToken): Promise<SourceFileConfigurationItem[]> { console.log(`cpptools-provider: provideConfigurations called for ${uris.length} URIs.`); await new Promise(resolve => setTimeout(resolve, 5000)); // Simulate async work return uris.map(uri => { return {	uri, configuration: { defines: [], includePath: [dirname(uri.fsPath)], compilerPath: "", standard: "c17", compilerArgs: [], intelliSenseMode: "windows-clang-arm", } }; }); } canProvideBrowseConfiguration(token?: vscode.CancellationToken): Thenable<boolean> { return Promise.resolve(true); } provideBrowseConfiguration(token?: vscode.CancellationToken): Thenable<WorkspaceBrowseConfiguration | null> { return Promise.resolve(null); } canProvideBrowseConfigurationsPerFolder(token?: vscode.CancellationToken): Thenable<boolean> { return Promise.resolve(false); } provideFolderBrowseConfiguration(uri: vscode.Uri, token?: vscode.CancellationToken): Thenable<WorkspaceBrowseConfiguration | null> { throw new Error('Method not implemented.'); } dispose() { } }

Steps:

  1. Run the code above as an extension (with "*" as the activation event)
  2. Open a folder with a C/C++ codebase that is large enough that it takes more than ~6 seconds to index
  3. Open a C/C++ file to trigger the configuration provider
  4. Wait until the indexing would normally be finished. As far as I can tell, if running C/C++: Log Diagnostics produces any output, the language service is still indexing; if it does not, the language service has hanged.

For me, this takes a few tries to hit. It only hangs about once every four tries.

Configuration and Logs

loggingLevel: 6 Custom configuration provider 'cpptools-provider' registered LSP: (received - deferred) textDocument/didOpen: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c LSP: (received) cpptools/initialize (id: 1) LSP: (invoked) cpptools/initialize (id: 1) cpptools version (TypeScript): 1.26.3 cpptools version (native): 1.26.3.0 Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. LSP: Sending response (id: 1) LSP: (received) cpptools/queryCompilerDefaults (id: 2) LSP: (invoked) cpptools/queryCompilerDefaults (id: 2) Compiler info database not connected - skipping load. Compiler info database not connected - skipping load. LSP: Sending response (id: 2) LSP: (received) cpptools/queryCompilerDefaults (id: 3) LSP: (invoked) cpptools/queryCompilerDefaults (id: 3) Compiler info database not connected - skipping load. Compiler info database not connected - skipping load. LSP: Sending response (id: 3) LSP: (received) cpptools/didChangeCppProperties (id: 4) LSP: (invoked) cpptools/didChangeCppProperties (id: 4) Code browsing service initialized LSP: (received - deferred) cpptools/didChangeVisibleTextEditors Populating file name cache... LSP: (received) cpptools/didChangeSettings Attempting to get defaults from C compiler in "compilerPath" property: 'cl.exe' Attempting to get defaults from C++ compiler in "compilerPath" property: 'cl.exe' Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\CPPWINRT will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\SHARED will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\UCRT will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\UM will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\WINRT will be indexed Folder: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\VC\TOOLS\MSVC\14.40.33807\ATLMFC\INCLUDE will be indexed Folder: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\VC\TOOLS\MSVC\14.40.33807\INCLUDE will be indexed Folder: D:\EW PROJECTS\ARM\9.50.1\ST\STM32F0XX\IAR-STM32F051R8-SK\UART-LCD will be indexed LSP: (queued) textDocument/didOpen: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c LSP: (queued) cpptools/didChangeVisibleTextEditors LSP: Sending response (id: 4) LSP: (invoked) cpptools/didChangeSettings Discovering files... Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (invoked) textDocument/didOpen: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c LSP: (invoked) cpptools/didChangeVisibleTextEditors Intellisense update pending for: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c Requesting a custom configuration for: D:\EW PROJECTS\ARM\9.50.1\ST\STM32F0XX\IAR-STM32F051R8-SK\UART-LCD\MAIN.C Processing folder (recursive): C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\UCRT Processing folder (recursive): C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\CPPWINRT Processing folder (recursive): C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\SHARED Processing folder (recursive): C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\UM LSP: (received) cpptools/didChangeCppProperties (id: 5) LSP: (invoked) cpptools/didChangeCppProperties (id: 5) Attempting to get defaults from C compiler in "compilerPath" property: 'cl.exe' LSP: (received) cpptools/didChangeVisibleTextEditors Attempting to get defaults from C++ compiler in "compilerPath" property: 'cl.exe' Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\CPPWINRT will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\SHARED will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\UCRT will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\UM will be indexed Folder: C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\WINRT will be indexed Folder: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\VC\TOOLS\MSVC\14.40.33807\ATLMFC\INCLUDE will be indexed Folder: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\VC\TOOLS\MSVC\14.40.33807\INCLUDE will be indexed Folder: D:\EW PROJECTS\ARM\9.50.1\ST\STM32F0XX\IAR-STM32F051R8-SK\UART-LCD will be indexed LSP: Sending response (id: 5) LSP: (invoked) cpptools/didChangeVisibleTextEditors Processing folder (recursive): C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.22621.0\WINRT LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors LSP: (received) cpptools/getDocumentSymbols: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 6) LSP: (invoked) cpptools/getDocumentSymbols: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 6) LSP: Sending response (id: 6) Processing folder (non-recursive): C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\VC\TOOLS\MSVC\14.40.33807\ATLMFC\INCLUDE LSP: (received) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 7) LSP: (invoked) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 7) LSP: Sending response (id: 7) LSP: (received) cpptools/getFoldingRanges: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 8) LSP: (invoked) cpptools/getFoldingRanges: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 8) LSP: Sending response (id: 8) LSP: (received) cpptools/pauseParsing LSP: (invoked) cpptools/pauseParsing LSP: (received) cpptools/clearCustomConfigurations LSP: (invoked) cpptools/clearCustomConfigurations LSP: (received) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 9) LSP: (invoked) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 9) LSP: Sending response (id: 9) LSP: $/cancelRequest (<unknown/completed>, id: 7) LSP: (received) cpptools/clearCustomConfigurations LSP: (invoked) cpptools/clearCustomConfigurations Processing folder (non-recursive): C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\VC\TOOLS\MSVC\14.40.33807\INCLUDE Processing folder (recursive): D:\EW PROJECTS\ARM\9.50.1\ST\STM32F0XX\IAR-STM32F051R8-SK\UART-LCD Done populating filename cache. Elapsed time: 159 ms Discovering files: 5926 file(s) processed 0 file(s) removed from database Done discovering files. Parsing remaining files... Parsing: 0 files(s) processed Done parsing remaining files. IntelliSense update scheduled and TU acquisition started for: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c Requesting a custom configuration for: D:\EW PROJECTS\ARM\9.50.1\ST\STM32F0XX\IAR-STM32F051R8-SK\UART-LCD\MAIN.C LSP: (received) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 10) LSP: $/cancelRequest (cpptools/getCodeActions, id: 10) LSP: (received) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 11) LSP: $/cancelRequest (cpptools/getCodeActions, id: 11) LSP: (received) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 12) LSP: (received) cpptools/resumeParsing LSP: (received) cpptools/finishedRequestCustomConfig: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c LSP: (invoked) cpptools/finishedRequestCustomConfig: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c LSP: (received) cpptools/didChangeTextEditorSelection LSP: $/cancelRequest (cpptools/getCodeActions, id: 12) LSP: (received) cpptools/hover: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 13) LSP: $/cancelRequest (cpptools/hover, id: 13) LSP: (received) cpptools/hover: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 14) LSP: $/cancelRequest (cpptools/hover, id: 14) LSP: (received) cpptools/hover: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 15) LSP: $/cancelRequest (cpptools/hover, id: 15) LSP: (received) cpptools/hover: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 16) LSP: $/cancelRequest (cpptools/hover, id: 16) LSP: (received) cpptools/hover: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 17) LSP: (received) cpptools/didChangeTextEditorSelection LSP: (received) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 18) LSP: $/cancelRequest (cpptools/hover, id: 17) LSP: (received) cpptools/hover: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 19) LSP: $/cancelRequest (cpptools/hover, id: 19) LSP: (received) cpptools/didChangeTextEditorSelection LSP: (received) cpptools/didChangeTextEditorSelection LSP: (received) cpptools/getCodeActions: file:///d%3A/EW%20Projects/arm/9.50.1/ST/STM32F0xx/IAR-STM32F051R8-SK/UART-LCD/main.c (id: 20) LSP: $/cancelRequest (cpptools/getCodeActions, id: 18)

Other Extensions

No response

Additional context

No response

Metadata

Metadata

Assignees

Labels

Feature: Configuration ProviderRelated to the configurationProvider property, e.g. ms-vscode.cmake-tools, ms-vscode.makefile-tools.Language ServicebugfixedCheck the Milestone for the release in which the fix is or will be available.

Type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions