Fix accidental non-collectible context unloading
authorJan Vorlicek <janvorli@microsoft.com>
Fri, 29 Mar 2019 11:55:00 +0000 (12:55 +0100)
committerJan Vorlicek <janvorli@microsoft.com>
Fri, 29 Mar 2019 11:55:00 +0000 (12:55 +0100)
commite3497bffca382c65b720c8193eb6bd3bc85e465f
tree9bd54870157da303e7ffbd9dcd58f9352a9897ab
parentffe8a331dca0edce1d5bc9537537ed2bfba31b71
Fix accidental non-collectible context unloading

The OnProcessExit was iterating over the s_contextsToUnload and calling
Unload on each of the contexts. However the s_contextsToUnload is a
misnomer, it contains all the contexts, both collectible and
non-collectible ones. So we were calling Unload on non-collectible
contexts too there. That resulted in InvalidOperationException being
thrown from the OnProcessExit.

This change fixes that by calling unload only on ALCs whose
IsCollectible returns true. It also renames the s_contextsToUnload to
s_allContexts.

Close #22902
src/System.Private.CoreLib/shared/System/Runtime/Loader/AssemblyLoadContext.cs