* Process.Close check for null before using
Fix when Process.Close throws Exception on redirected StandardOutput or StandardError.
Steps to reproduce
process.Start
process.BeginOutputReadLine
process.Start
process.Dispose
* Address PR feedback
Commit migrated from https://github.com/dotnet/corefx/commit/
ff8f3149fc7aa1362b35b15da315646c3bb48dc9
{
if (_outputStreamReadMode == StreamReadMode.AsyncMode)
{
- _output.CancelOperation();
+ _output?.CancelOperation();
}
_standardOutput.Close();
}
{
if (_errorStreamReadMode == StreamReadMode.AsyncMode)
{
- _error.CancelOperation();
+ _error?.CancelOperation();
}
_standardError.Close();
}
}
[Fact]
+ public void Start_RedirectStandardOutput_StartAgain_DoesntThrow()
+ {
+ using (Process process = CreateProcess(() =>
+ {
+ Console.WriteLine("hello world");
+ return SuccessExitCode;
+ }))
+ {
+ process.StartInfo.RedirectStandardOutput = true;
+
+ Assert.True(process.Start());
+ process.BeginOutputReadLine();
+
+ Assert.True(process.Start());
+ }
+ }
+
+ [Fact]
public void Start_Disposed_ThrowsObjectDisposedException()
{
var process = new Process();