You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The code then throws a LockRecursionException in AssemblyList.GetEnumerator(), caused by EnterReadLock() when another lock is already held.
This is probably caused by the fact that System.Configuration and System.Configuration.ConfigurationManager are both assemblies that need to be loaded, and there is a race condition between the AssemblyLoadHandler, the ResolveHandler, LookupType and FindLoadedAssembly.
@denfromufa A PR is in the wings, but I wasn't sure whether there was too much going on at the moment?
I'll see if I can get the same thing to happen in other runtimes with a "fake" example - I think the naming of System.Configuration and System.Configuration.ConfigurationManager is significant, as is the fact that the second uses types from the first ...
Not so easy to put this into the tests, I think, it needs two assemblies ...
Please assign it to me, I'll get a PR out soon, hopefully with a covering test.
Activity
Cronan commentedon Feb 13, 2018
I was able to fix this by replacing the AssemblyList implementation with:
and a constructor:
den-run-ai commentedon Feb 13, 2018
@Cronan pull requests are welcome :) thanks for finding this! I wonder if there is the same lock recursion in other .NET runtimes?
Cronan commentedon Feb 13, 2018
@denfromufa A PR is in the wings, but I wasn't sure whether there was too much going on at the moment?
I'll see if I can get the same thing to happen in other runtimes with a "fake" example - I think the naming of System.Configuration and System.Configuration.ConfigurationManager is significant, as is the fact that the second uses types from the first ...
Not so easy to put this into the tests, I think, it needs two assemblies ...
Please assign it to me, I'll get a PR out soon, hopefully with a covering test.
den-run-ai commentedon Feb 13, 2018
@Cronan this PR is small enough to be merged without much effort. Some PRs are not like that.