From ce61f7f75f280558aa140580eee534d8efcd7cba Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Wed, 5 Aug 2026 09:25:23 -0500 Subject: [PATCH] Synchronize redirected output snapshots Take stdout and stderr snapshots under the same locks used by asynchronous output callbacks so StringBuilder cannot be read while it is being mutated. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../ExecuteHelper.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.DotNet.ScenarioTests.Common/ExecuteHelper.cs b/src/Microsoft.DotNet.ScenarioTests.Common/ExecuteHelper.cs index 58ad33255..4e799ecf4 100644 --- a/src/Microsoft.DotNet.ScenarioTests.Common/ExecuteHelper.cs +++ b/src/Microsoft.DotNet.ScenarioTests.Common/ExecuteHelper.cs @@ -82,13 +82,21 @@ public static (Process Process, string StdOut, string StdErr) ExecuteProcess( throw new InvalidOperationException(msg); } - string output = stdOutput.ToString().Trim(); + string output; + lock (stdOutput) + { + output = stdOutput.ToString().Trim(); + } if (logOutput && !string.IsNullOrWhiteSpace(output)) { outputHelper.WriteLine(output); } - string error = stdError.ToString().Trim(); + string error; + lock (stdError) + { + error = stdError.ToString().Trim(); + } if (logOutput && !string.IsNullOrWhiteSpace(error)) { outputHelper.WriteLine(error);