Skip to content

Race condition in TaskRegistry in /mt mode #12645

@AR-May

Description

@AR-May

It seems there is a race condition in TypeLoader class

    "C:\Users\alinama\work\testRepos\many-projects\many-projects.sln" (rebuild target) (1) ->
       "C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj" (Rebuild target) (3) ->
         MSBUILD : error : This is an unhandled exception in MSBuild -- PLEASE UPVOTE AN EXISTING ISSUE OR FILE A NEW ONE A
       T https://aka.ms/msbuild/unhandled [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj
       ]
       MSBUILD : error :     System.ObjectDisposedException: This object is no longer valid because the MetadataLoadContext
        that created it has been disposed. [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.cspro
       j]
       MSBUILD : error :    at System.Reflection.MetadataLoadContext.DisposeCheck() [C:\Users\alinama\work\testRepos\many-p
       rojects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Reflection.TypeLoading.Ecma.EcmaProperty.ComputeName() [C:\Users\alinama\work\testRep
       os\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Reflection.TypeLoading.RoProperty.get_Name() [C:\Users\alinama\work\testRepos\many-pr
       ojects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Execution.ReflectableTaskPropertyInfo..ctor(PropertyInfo propertyInfo, Boole
       an output, Boolean required, Boolean isAssignableToITaskItemType) in C:\Users\alinama\work\msbuild\src\Build\Instanc
       e\ReflectableTaskPropertyInfo.cs:line 61 [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.
       csproj]
       MSBUILD : error :    at Microsoft.Build.Shared.LoadedType..ctor(Type type, AssemblyLoadInfo assemblyLoadInfo, Assemb
       ly loadedAssembly, Type iTaskItemType, Boolean loadedViaMetadataLoadContext) in C:\Users\alinama\work\msbuild\src\Sh
       ared\LoadedType.cs:line 131 [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Shared.TypeLoader.AssemblyInfoToLoadedTypes.<GetLoadedTypeFromTypeNameUsingM
       etadataLoadContext>b__10_0(String typeName) in C:\Users\alinama\work\msbuild\src\Shared\TypeLoader.cs:line 427 [C:\U
       sers\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
        [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Shared.TypeLoader.AssemblyInfoToLoadedTypes.GetLoadedTypeFromTypeNameUsingMe
       tadataLoadContext(String typeName) in C:\Users\alinama\work\msbuild\src\Shared\TypeLoader.cs:line 384 [C:\Users\alin
       ama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Shared.TypeLoader.AssemblyInfoToLoadedTypes.GetLoadedTypeByTypeName(String t
       ypeName, Boolean useTaskHost) in C:\Users\alinama\work\msbuild\src\Shared\TypeLoader.cs:line 330 [C:\Users\alinama\w
       ork\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Shared.TypeLoader.GetLoadedType(ConcurrentDictionary`2 cache, String typeNam
       e, AssemblyLoadInfo assembly, Boolean useTaskHost) in C:\Users\alinama\work\msbuild\src\Shared\TypeLoader.cs:line 25
       4 [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Shared.TypeLoader.Load(String typeName, AssemblyLoadInfo assembly, Boolean u
       seTaskHost) in C:\Users\alinama\work\msbuild\src\Shared\TypeLoader.cs:line 222 [C:\Users\alinama\work\testRepos\many
       -projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.AssemblyTaskFactory.InitializeFactory(AssemblyLoadInfo loadInfo, Str
       ing taskName, IDictionary`2 taskParameters, String taskElementContents, IDictionary`2 taskFactoryIdentityParameters,
        Boolean taskHostExplicitlyRequested, TargetLoggingContext targetLoggingContext, ElementLocation elementLocation, St
       ring taskProjectFile) in C:\Users\alinama\work\msbuild\src\Build\Instance\TaskFactories\AssemblyTaskFactory.cs:line
       296 [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Execution.TaskRegistry.RegisteredTaskRecord.GetTaskFactory(TargetLoggingCont
       ext targetLoggingContext, ElementLocation elementLocation, String taskProjectFile, Boolean isMultiThreadedBuild) in
       C:\Users\alinama\work\msbuild\src\Build\Instance\TaskRegistry.cs:line 1515 [C:\Users\alinama\work\testRepos\many-pro
       jects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Execution.TaskRegistry.RegisteredTaskRecord.CanTaskBeCreatedByFactory(String
        taskName, String taskProjectFile, IDictionary`2 taskIdentityParameters, TargetLoggingContext targetLoggingContext,
       ElementLocation elementLocation, Boolean isMultiThreadedBuild) in C:\Users\alinama\work\msbuild\src\Build\Instance\T
       askRegistry.cs:line 1395 [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Execution.TaskRegistry.<>c__DisplayClass40_0.<GetMatchingRegistration>b__0(R
       egisteredTaskRecord r) in C:\Users\alinama\work\msbuild\src\Build\Instance\TaskRegistry.cs:line 776 [C:\Users\alinam
       a\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) [C:\U
       sers\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Execution.TaskRegistry.GetMatchingRegistration(String taskName, IEnumerable`
       1 taskRecords, String taskProjectFile, IDictionary`2 taskIdentityParameters, TargetLoggingContext targetLoggingConte
       xt, ElementLocation elementLocation, Boolean isMultiThreadedBuild) in C:\Users\alinama\work\msbuild\src\Build\Instan
       ce\TaskRegistry.cs:line 775 [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Execution.TaskRegistry.GetTaskRegistrationRecord(String taskName, String tas
       kProjectFile, IDictionary`2 taskIdentityParameters, Boolean exactMatchRequired, TargetLoggingContext targetLoggingCo
       ntext, ElementLocation elementLocation, Boolean& retrievedFromCache, Boolean isMultiThreadedBuild) in C:\Users\alina
       ma\work\msbuild\src\Build\Instance\TaskRegistry.cs:line 603 [C:\Users\alinama\work\testRepos\many-projects\ClassLibr
       ary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.Execution.TaskRegistry.GetRegisteredTask(String taskName, String taskProject
       File, IDictionary`2 taskIdentityParameters, Boolean exactMatchRequired, TargetLoggingContext targetLoggingContext, E
       lementLocation elementLocation, Boolean isMultiThreadedBuild) in C:\Users\alinama\work\msbuild\src\Build\Instance\Ta
       skRegistry.cs:line 473 [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TaskExecutionHost.FindTaskInRegistry(IDictionary`2 taskIdentityParam
       eters) in C:\Users\alinama\work\msbuild\src\Build\BackEnd\TaskExecutionHost\TaskExecutionHost.cs:line 904 [C:\Users\
       alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TaskExecutionHost.FindTask(IDictionary`2 taskIdentityParameters) in
       C:\Users\alinama\work\msbuild\src\Build\BackEnd\TaskExecutionHost\TaskExecutionHost.cs:line 281 [C:\Users\alinama\wo
       rk\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteBucket>d__20.MoveNext() in C:\Users\alinama\work
       \msbuild\src\Build\BackEnd\Components\RequestBuilder\TaskBuilder.cs:line 447 [C:\Users\alinama\work\testRepos\many-p
       rojects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult() [C:\Users\alinama\work\testRe
       pos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteTask>d__19.MoveNext() in C:\Users\alinama\work\m
       sbuild\src\Build\BackEnd\Components\RequestBuilder\TaskBuilder.cs:line 347 [C:\Users\alinama\work\testRepos\many-pro
       jects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult() [C:\Users\alinama\work\testRe
       pos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteTask>d__14.MoveNext() in C:\Users\alinama\work\m
       sbuild\src\Build\BackEnd\Components\RequestBuilder\TaskBuilder.cs:line 201 [C:\Users\alinama\work\testRepos\many-pro
       jects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() [C:\Users\alinama\work\testRepos\m
       any-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TargetEntry.<ProcessBucket>d__50.MoveNext() in C:\Users\alinama\work
       \msbuild\src\Build\BackEnd\Components\RequestBuilder\TargetEntry.cs:line 826 [C:\Users\alinama\work\testRepos\many-p
       rojects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult() [C:\Users\alinama\work\testRe
       pos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TargetEntry.<ExecuteTarget>d__43.MoveNext() in C:\Users\alinama\work
       \msbuild\src\Build\BackEnd\Components\RequestBuilder\TargetEntry.cs:line 524 [C:\Users\alinama\work\testRepos\many-p
       rojects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() [C:\Users\alinama\work\testRepos\man
       y-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TargetBuilder.<ProcessTargetStack>d__24.MoveNext() in C:\Users\alina
       ma\work\msbuild\src\Build\BackEnd\Components\RequestBuilder\TargetBuilder.cs:line 512 [C:\Users\alinama\work\testRep
       os\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() [C:\Users\alinama\work\testRepos\man
       y-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.TargetBuilder.<BuildTargets>d__11.MoveNext() in C:\Users\alinama\wor
       k\msbuild\src\Build\BackEnd\Components\RequestBuilder\TargetBuilder.cs:line 178 [C:\Users\alinama\work\testRepos\man
       y-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() [C:\Users\alinama\work\testRepos\m
       any-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.RequestBuilder.<BuildProject>d__67.MoveNext() in C:\Users\alinama\wo
       rk\msbuild\src\Build\BackEnd\Components\RequestBuilder\RequestBuilder.cs:line 1231 [C:\Users\alinama\work\testRepos\
       many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error : --- End of stack trace from previous location where exception was thrown --- [C:\Users\alinama\wor
       k\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [C:\Users\alinama\
       work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task tas
       k) [C:\Users\alinama\work\testRepos\many-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() [C:\Users\alinama\work\testRepos\m
       any-projects\ClassLibrary2\ClassLibrary2.csproj]
       MSBUILD : error :    at Microsoft.Build.BackEnd.RequestBuilder.<RequestThreadProc>d__58.MoveNext() in C:\Users\alina
       ma\work\msbuild\src\Build\BackEnd\Components\RequestBuilder\RequestBuilder.cs:line 784 [C:\Users\alinama\work\testRe
       pos\many-projects\ClassLibrary2\ClassLibrary2.csproj]

Repro steps:

  1. create a solution with more than one project
  2. Set $env:MSBUILDFORCEALLTASKSOUTOFPROC=1
  3. build the solution with /mt /m

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions