Skip to content

Commit

Permalink
Retry installer Process.Start if ETXTBSY (#59765)
Browse files Browse the repository at this point in the history
Caused by #58964

Fixes #53587

(cherry picked from commit 8dd058a)
  • Loading branch information
agocke committed Jan 5, 2022
1 parent ad93f8c commit b4d3753
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/installer/tests/TestUtils/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
Expand Down Expand Up @@ -120,7 +121,7 @@ private static bool ShouldUseCmd(string executable)
}
else
{
// Search the path to see if we can find it
// Search the path to see if we can find it
foreach (var path in System.Environment.GetEnvironmentVariable("PATH").Split(Path.PathSeparator))
{
var candidate = Path.Combine(path, executable + ".exe");
Expand Down Expand Up @@ -196,7 +197,22 @@ public Command Start()

ReportExecBegin();

Process.Start();
// Retry if we hit ETXTBSY due to Linux race
// https://github.com/dotnet/runtime/issues/58964
for (int i = 0; ; i++)
{
try
{
Process.Start();
break;
}
catch (Win32Exception e) when (i < 3 && e.Message.Contains("Text file busy"))
{
// 10 ms is short, but the race we're trying to avoid is in-between
// "fork" and "exec", so it should be fast
Thread.Sleep(10);
}
}

if (Process.StartInfo.RedirectStandardOutput)
{
Expand Down

0 comments on commit b4d3753

Please sign in to comment.