diff --git a/src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/LicenseManager.cs b/src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/LicenseManager.cs index 0d6b7a4d8166c2..f630b134e02df6 100644 --- a/src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/LicenseManager.cs +++ b/src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/LicenseManager.cs @@ -2,10 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System.Reflection; -using System.Diagnostics; using System.Collections; using System.ComponentModel.Design; +using System.Diagnostics; +using System.Reflection; +using System.Threading; namespace System.ComponentModel { @@ -87,17 +88,26 @@ private static void CacheProvider(Type type, LicenseProvider provider) { if (s_providers == null) { - s_providers = new Hashtable(); + Interlocked.CompareExchange(ref s_providers, new Hashtable(), null); + } + + lock (s_providers) + { + s_providers[type] = provider; } - s_providers[type] = provider; if (provider != null) { if (s_providerInstances == null) { - s_providerInstances = new Hashtable(); + Interlocked.CompareExchange(ref s_providerInstances, new Hashtable(), null); + } + + Type providerType = provider.GetType(); + lock (s_providerInstances) + { + s_providerInstances[providerType] = provider; } - s_providerInstances[provider.GetType()] = provider; } }