diff --git a/src/System.Management.Automation/DscSupport/JsonDscClassCache.cs b/src/System.Management.Automation/DscSupport/JsonDscClassCache.cs index 5c3da715ccc..dfda9b8460a 100755 --- a/src/System.Management.Automation/DscSupport/JsonDscClassCache.cs +++ b/src/System.Management.Automation/DscSupport/JsonDscClassCache.cs @@ -99,9 +99,14 @@ public static class DscClassCache private static readonly HashSet s_hiddenResourceCache = new HashSet(StringComparer.OrdinalIgnoreCase) { "MSFT_BaseConfigurationProviderRegistration", "MSFT_CimConfigurationProviderRegistration", "MSFT_PSConfigurationProviderRegistration" }; - // A collection to prevent circular importing case when Import-DscResource does not have a module specified + /// + /// Gets a collection to prevent circular importing case when Import-DscResource does not have a module specified. + /// + private static HashSet CurrentImportDscResourceInvocations + => t_currentImportDscResourceInvocations ??= new HashSet(StringComparer.OrdinalIgnoreCase); + [ThreadStatic] - private static readonly HashSet t_currentImportDscResourceInvocations = new(StringComparer.OrdinalIgnoreCase); + private static HashSet t_currentImportDscResourceInvocations; /// /// Gets DSC class cache for this runspace. @@ -361,7 +366,7 @@ public static void ClearCache() ClassCache.Clear(); ByClassModuleCache.Clear(); CacheResourcesFromMultipleModuleVersions = false; - t_currentImportDscResourceInvocations.Clear(); + CurrentImportDscResourceInvocations.Clear(); } private static string GetModuleQualifiedResourceName(string moduleName, string moduleVersion, string className, string resourceName) @@ -1140,9 +1145,9 @@ internal static void LoadResourcesFromModuleInImportResourcePostParse( // Lookup the required resources under available PowerShell modules when modulename is not specified // Make sure that this is not a circular import/parsing var callLocation = string.Join(':', scriptExtent.File, scriptExtent.StartLineNumber, scriptExtent.StartColumnNumber, scriptExtent.Text); - if (!t_currentImportDscResourceInvocations.Contains(callLocation)) + if (!CurrentImportDscResourceInvocations.Contains(callLocation)) { - t_currentImportDscResourceInvocations.Add(callLocation); + CurrentImportDscResourceInvocations.Add(callLocation); using (var powerShell = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace)) { powerShell.AddCommand("Get-Module");