Skip to content

Commit e02d81a

Browse files
authored
Clear provider on disposal (#79128)
Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/2441953 Seeing the odd `ObjectDisposedException` when the Razor LSP dynamic file info provider tries to make an LSP request, presumably because a workspace event is happening while the LSP server is being shut down. No cabs to 100% confirm, but this change seems small and safe enough to me.
2 parents 3822d9e + fc57d38 commit e02d81a

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/Razor/RazorDynamicFileInfoProvider.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.Razor;
1919
[ExportMetadata("Extensions", new string[] { "cshtml", "razor", })]
2020
[method: ImportingConstructor]
2121
[method: Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]
22-
internal sealed partial class RazorDynamicFileInfoProvider(Lazy<LanguageServerWorkspaceFactory> workspaceFactory, ILoggerFactory loggerFactory) : IDynamicFileInfoProvider, ILspService, IOnInitialized
22+
internal sealed partial class RazorDynamicFileInfoProvider(Lazy<LanguageServerWorkspaceFactory> workspaceFactory, ILoggerFactory loggerFactory) : IDynamicFileInfoProvider, ILspService, IOnInitialized, IDisposable
2323
{
2424
private RazorWorkspaceService? _razorWorkspaceService;
2525
private RazorLspDynamicFileInfoProvider? _dynamicFileInfoProvider;
@@ -80,4 +80,11 @@ public async Task RemoveDynamicFileInfoAsync(ProjectId projectId, string? projec
8080

8181
await _dynamicFileInfoProvider.RemoveDynamicFileInfoAsync(workspaceFactory.Value.HostWorkspace, projectId, projectFilePath, filePath, cancellationToken).ConfigureAwait(false);
8282
}
83+
84+
public void Dispose()
85+
{
86+
// Dispose is called when the LSP server is being shut down. Clear the dynamic file provider in case a workspace
87+
// event is raised after, as the actual provider will try to make LSP requests.
88+
_dynamicFileInfoProvider = null;
89+
}
8390
}

0 commit comments

Comments
 (0)