From 22c36ad0f0e38fa031dd2720cd6d310432c26b28 Mon Sep 17 00:00:00 2001 From: Huei Feng <34702552+hueifeng@users.noreply.github.com> Date: Sat, 30 May 2020 02:45:48 +0800 Subject: [PATCH] fix processex.cs possible problems (#22347) - `_output ` May be executed in synchronous and asynchronous situations - Process Is a nullable --- src/Shared/Process/ProcessEx.cs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Shared/Process/ProcessEx.cs b/src/Shared/Process/ProcessEx.cs index b04df7f8ed..c4f0002d5c 100644 --- a/src/Shared/Process/ProcessEx.cs +++ b/src/Shared/Process/ProcessEx.cs @@ -197,7 +197,11 @@ namespace Microsoft.AspNetCore.Internal var exited = Exited.Wait(timeSpan.Value); if (!exited) { - _output.WriteLine($"The process didn't exit within the allotted time ({timeSpan.Value.TotalSeconds} seconds)."); + lock (_testOutputLock) + { + _output.WriteLine($"The process didn't exit within the allotted time ({timeSpan.Value.TotalSeconds} seconds)."); + } + _process.Dispose(); } else if (assertSuccess && _process.ExitCode != 0) @@ -227,13 +231,16 @@ namespace Microsoft.AspNetCore.Internal _process.KillTree(); } - _process.CancelOutputRead(); - _process.CancelErrorRead(); + if (_process != null) + { + _process.CancelOutputRead(); + _process.CancelErrorRead(); - _process.ErrorDataReceived -= OnErrorData; - _process.OutputDataReceived -= OnOutputData; - _process.Exited -= OnProcessExited; - _process.Dispose(); + _process.ErrorDataReceived -= OnErrorData; + _process.OutputDataReceived -= OnOutputData; + _process.Exited -= OnProcessExited; + _process.Dispose(); + } } } }