Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2264,7 +2264,6 @@ public void TestLongProcessIsWorking()
}

[PlatformSpecific(TestPlatforms.AnyUnix)]
[ActiveIssue("https://github.com/dotnet/runtime/issues/29330", TestPlatforms.OSX)]
[Fact]
[ActiveIssue("https://github.com/dotnet/runtime/issues/52852", TestPlatforms.MacCatalyst)]
[ActiveIssue("https://github.com/dotnet/runtime/issues/53095", TestPlatforms.Android)]
Expand Down Expand Up @@ -2294,6 +2293,10 @@ public void LongProcessNamesAreSupported()

using (Process px = Process.Start(sleepCommandPathFileName, "600"))
{
// Reading of long process names is flaky during process startup and shutdown.
// Wait a bit to skip over the period where the ProcessName is not reliable.
Thread.Sleep(100);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might it still be flaky even with a 100ms delay? Is there some way we could make it more deterministic, some callback we could subscribe to in order to be notified when moving forward is acceptable?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The proc file system used by underlying implementation reads the target process memory to extract the command line. I do not think there is any callback that we can subscribe to in the API implementation that tells us that the relevant memory in the target process contains the right information. Atypical or misbehaving processes may not have the information available for the whole process lifetime.

It was very rare to see this test to fail before the change. I would expect that 100ms delay should be good enough to make the rare failures to go away.

If we still see the test fail intermittently after this fix, we can output something in the child process and wait for the output in the test method. Once we see the output, we can be sure that the process is up and running and the command line is available.


Process[] runningProcesses = Process.GetProcesses();
try
{
Expand Down
Loading