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
  • Loading branch information
agocke authored Sep 29, 2021
1 parent cd1cd1d commit 8dd058a
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 8dd058a

Please sign in to comment.