Skip to content

Commit 6c7b39b

Browse files
author
Andrew Hall
committed
Fix HashSet usage and null out when done
1 parent f7a49db commit 6c7b39b

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/WorkspaceService.cs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license. See License.txt in the project root for license information.
33

44
using System.Composition;
5+
using Microsoft.AspNetCore.Razor;
56
using Microsoft.CodeAnalysis;
67
using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features;
78
using Microsoft.Extensions.Logging;
@@ -14,9 +15,9 @@ internal sealed class WorkspaceService(ILoggerFactory loggerFactory) : RazorWork
1415
{
1516
private readonly ILoggerFactory _loggerFactory = loggerFactory;
1617
private readonly ILogger _logger = loggerFactory.CreateLogger<WorkspaceService>();
17-
private Lock _initializeLock = new();
18+
private readonly Lock _initializeLock = new();
1819
private RazorWorkspaceListener? _razorWorkspaceListener;
19-
private HashSet<ProjectId> _projectIdWithDynamicFiles = [];
20+
private HashSet<ProjectId>? _projectIdWithDynamicFiles = [];
2021

2122
public override void Initialize(Workspace workspace, string pipeName)
2223
{
@@ -33,9 +34,9 @@ public override void Initialize(Workspace workspace, string pipeName)
3334
_razorWorkspaceListener = new RazorWorkspaceListener(_loggerFactory);
3435
_razorWorkspaceListener.EnsureInitialized(workspace, pipeName);
3536

36-
projectsToInitialize = _projectIdWithDynamicFiles;
37-
// May as well clear out the collection, it will never get used again anyway.
38-
_projectIdWithDynamicFiles = [];
37+
// _projectIdWithDynamicFiles won't be used again after initialization is done
38+
projectsToInitialize = _projectIdWithDynamicFiles.AssumeNotNull();
39+
_projectIdWithDynamicFiles = null;
3940
}
4041

4142
foreach (var projectId in projectsToInitialize)
@@ -47,6 +48,24 @@ public override void Initialize(Workspace workspace, string pipeName)
4748

4849
public override void NotifyDynamicFile(ProjectId projectId)
4950
{
50-
_razorWorkspaceListener?.NotifyDynamicFile(projectId);
51+
if (_razorWorkspaceListener is null)
52+
{
53+
lock (_initializeLock)
54+
{
55+
if (_razorWorkspaceListener is not null)
56+
{
57+
_razorWorkspaceListener.NotifyDynamicFile(projectId);
58+
return;
59+
}
60+
61+
_projectIdWithDynamicFiles
62+
.AssumeNotNull()
63+
.Add(projectId);
64+
}
65+
}
66+
else
67+
{
68+
_razorWorkspaceListener?.NotifyDynamicFile(projectId);
69+
}
5170
}
5271
}

0 commit comments

Comments
 (0)