From dbbd6d84c9455d91512aa66a6ee45b9460617c05 Mon Sep 17 00:00:00 2001 From: Rama Krishnan Raghupathy Date: Fri, 16 Dec 2016 16:01:54 -0800 Subject: [PATCH] Make CultureInfo.get_Parent thread safe --- .../src/System/Globalization/CultureInfo.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs b/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs index ae539942699..bc792787c1c 100644 --- a/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs +++ b/src/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs @@ -590,17 +590,18 @@ public virtual CultureInfo Parent { if (null == _parent) { + CultureInfo culture = null; try { string parentName = this.m_cultureData.SPARENT; if (String.IsNullOrEmpty(parentName)) { - _parent = InvariantCulture; + culture = InvariantCulture; } else { - _parent = new CultureInfo(parentName, this.m_cultureData.UseUserOverride); + culture = new CultureInfo(parentName, this.m_cultureData.UseUserOverride); } } catch (ArgumentException) @@ -608,8 +609,9 @@ public virtual CultureInfo Parent // 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; }