From 7e2c5455e40bdd0597886cd72daecc81a0c68418 Mon Sep 17 00:00:00 2001 From: Roman Konecny Date: Fri, 31 Mar 2023 15:21:33 +0200 Subject: [PATCH] Thread safety fixes --- src/MSBuild/LiveLogger/LiveLogger.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/MSBuild/LiveLogger/LiveLogger.cs b/src/MSBuild/LiveLogger/LiveLogger.cs index 52549f001a..11675e109c 100644 --- a/src/MSBuild/LiveLogger/LiveLogger.cs +++ b/src/MSBuild/LiveLogger/LiveLogger.cs @@ -461,7 +461,11 @@ internal sealed class LiveLogger : INodeLogger project.Stopwatch.Start(); string projectFile = Path.GetFileName(e.ProjectFile) ?? e.ProjectFile; - _nodes[NodeIndexForContext(buildEventContext)] = new(projectFile, project.TargetFramework, e.TargetName, project.Stopwatch); + NodeStatus? nodeStatus = new(projectFile, project.TargetFramework, e.TargetName, project.Stopwatch); + lock (_lock) + { + _nodes[NodeIndexForContext(buildEventContext)] = nodeStatus; + } } } @@ -490,7 +494,10 @@ internal sealed class LiveLogger : INodeLogger if (buildEventContext is not null && e.TaskName == "MSBuild") { // This will yield the node, so preemptively mark it idle - _nodes[NodeIndexForContext(buildEventContext)] = null; + lock (_lock) + { + _nodes[NodeIndexForContext(buildEventContext)] = null; + } if (_projects.TryGetValue(new ProjectContext(buildEventContext), out Project? project)) {