Skip to content

[Bug]: MSBuild crashes on parallel build using docker #43750

@pchalamet

Description

@pchalamet

Issue Description

Random crashes in MSBuild where trying to parallelize .net builds in Docker:

  • System.IO.IOException: The system cannot open the device or file specified. : 'NuGet-Migrations'
  • System.ApplicationException: Object synchronization method was called from an unsynchronized block of code.

Steps to Reproduce

docker run --rm --net=host --name 8C91EC60706A76686DEE83F23CE80DD78D48E014DCCB1F7389F9F5EF9D9BFF09 -v /var/run/docker.sock:/var/run/docker.sock -v /Users/pierre/.terrabuild/home/containers:/root -v /Users/pierre/.terrabuild/home/tmp:/tmp -v /Users/pierre/src/MagnusOpera/terrabuild/terrabuild/src:/terrabuild -w /terrabuild/Terrabuild.Common --entrypoint dotnet -e DOTNET_CLI_TELEMETRY_OPTOUT -e DOTNET_NOLOGO -e DOTNET_SKIP_FIRST_TIME_EXPERIENCE mcr.microsoft.com/dotnet/sdk:8.0.302 build --no-dependencies --configuration Debug

9/27/2024 11:51:49 AM ERR System.IO.IOException: The system cannot open the device or file specified. : 'NuGet-Migrations'
9/27/2024 11:51:49 AM ERR    at System.Threading.Mutex.CreateMutexCore(Boolean initiallyOwned, String name, Boolean& createdNew)
9/27/2024 11:51:49 AM ERR    at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name)
9/27/2024 11:51:49 AM ERR    at NuGet.Common.Migrations.MigrationRunner.Run(String migrationsDirectory)
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure()
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Cli.Program.ConfigureDotNetForFirstTimeUse(IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel, IAspNetCertificateSentinel aspNetCertificateSentinel, IFileSentinel toolPathSentinel, Boolean isDotnetBeingInvokedFromNativeInstaller, DotnetFirstRunConfiguration dotnetFirstRunConfiguration, IEnvironmentProvider environmentProvider, Dictionary`2 performanceMeasurements)
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, TimeSpan startupTime, ITelemetry telemetryClient)
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Cli.Program.Main(String[] args)
9/27/2024 11:51:49 AM ERR
9/27/2024 11:51:49 AM OUT
docker run --rm --net=host --name DAB5E60C96ACE37A01B06B64DFD9CD55E4ED14F2C614AA512BA51291FD95266E -v /var/run/docker.sock:/var/run/docker.sock -v /Users/pierre/.terrabuild/home/containers:/root -v /Users/pierre/.terrabuild/home/tmp:/tmp -v /Users/pierre/src/MagnusOpera/terrabuild/terrabuild/src:/terrabuild -w /terrabuild/Terrabuild.PubSub --entrypoint dotnet -e DOTNET_CLI_TELEMETRY_OPTOUT -e DOTNET_NOLOGO -e DOTNET_SKIP_FIRST_TIME_EXPERIENCE mcr.microsoft.com/dotnet/sdk:8.0.302 build --no-dependencies --configuration Debug

9/27/2024 11:51:49 AM ERR System.ApplicationException: Object synchronization method was called from an unsynchronized block of code.
9/27/2024 11:51:49 AM ERR    at System.Threading.Mutex.ReleaseMutex()
9/27/2024 11:51:49 AM ERR    at NuGet.Common.Migrations.MigrationRunner.Run(String migrationsDirectory)
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure()
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Cli.Program.ConfigureDotNetForFirstTimeUse(IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel, IAspNetCertificateSentinel aspNetCertificateSentinel, IFileSentinel toolPathSentinel, Boolean isDotnetBeingInvokedFromNativeInstaller, DotnetFirstRunConfiguration dotnetFirstRunConfiguration, IEnvironmentProvider environmentProvider, Dictionary`2 performanceMeasurements)
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, TimeSpan startupTime, ITelemetry telemetryClient)
9/27/2024 11:51:49 AM ERR    at Microsoft.DotNet.Cli.Program.Main(String[] args)
9/27/2024 11:51:49 AM ERR
9/27/2024 11:51:49 AM OUT

Expected Behavior

Crashes are random. I expect this to always work.

Actual Behavior

Exception thrown. See above.

Analysis

Call stacks are provided for analysis.

Versions & Configurations

I have this in my .bashrc (as they are passed to Docker):

export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
export DOTNET_NOLOGO=true
export DOTNET_CLI_TELEMETRY_OPTOUT=true

also running on Intel mac and Arm mac (both Sequoia 15 but was crashing with previous versions). This crashes the same for both machine at the same rate.

.net sdk version (8.0.302) is specified on the docker command line.

for sources (to reproduce the build), use this: https://github.com/MagnusOpera/Terrabuild/tree/44ce393db4e8ad891cf072389c7a2023096bc44f

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions