Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure Process.ProcessName doesn't change when setting Thread.Name on Linux #34064

Merged
merged 11 commits into from
May 12, 2020
7 changes: 7 additions & 0 deletions src/coreclr/src/pal/src/thread/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1641,6 +1641,13 @@ CorUnix::InternalSetThreadDescription(

pTargetThread->Lock(pThread);

// Ignore requests to set the main thread name because
tmds marked this conversation as resolved.
Show resolved Hide resolved
// it causes the value returned by Process.ProcessName to change.
if ((pid_t)pTargetThread->GetThreadId() == getpid())
{
goto InternalSetThreadDescriptionExit;
}

/* translate the wide char lpThreadDescription string to multibyte string */
nameSize = WideCharToMultiByte(CP_ACP, 0, lpThreadDescription, -1, NULL, 0, NULL, NULL);

Expand Down
15 changes: 15 additions & 0 deletions src/libraries/System.Threading.Thread/tests/ThreadTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,21 @@ public static void NameTest()
});
}

[Fact]
[ActiveIssue ("https://github.com/dotnet/runtime/issues/35908", TestRuntimes.Mono)]
public static void ThreadNameDoesNotAffectProcessName()
{
// On Linux, changing the main thread name affects ProcessName.
// To avoid that, .NET ignores requests to change the main thread name.
RemoteExecutor.Invoke(() =>
{
const string ThreadName = "my-thread";
Thread.CurrentThread.Name = ThreadName;
Assert.Equal(ThreadName, Thread.CurrentThread.Name);
Assert.NotEqual(ThreadName, Process.GetCurrentProcess().ProcessName);
}).Dispose();
}

[Fact]
public static void PriorityTest()
{
Expand Down