diff --git a/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs b/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs index f0da4bf1918c..84d7ac29e996 100644 --- a/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs +++ b/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs @@ -495,23 +495,26 @@ public virtual CultureInfo Parent { if (null == _parent) { + CultureInfo culture = null; string parentName = _cultureData.SPARENT; if (string.IsNullOrEmpty(parentName)) { - _parent = InvariantCulture; + culture = InvariantCulture; } else { - _parent = CreateCultureInfoNoThrow(parentName, _cultureData.UseUserOverride); - if (_parent == null) + culture = CreateCultureInfoNoThrow(parentName, _cultureData.UseUserOverride); + if (culture == null) { // For whatever reason our IPARENT or SPARENT wasn't correct, so use invariant // We can't allow ourselves to fail. In case of custom cultures the parent of the // current custom culture isn't installed. - _parent = InvariantCulture; + culture = InvariantCulture; } } + + Interlocked.CompareExchange(ref _parent, culture, null); } return _parent; }