diff options
author | Rama krishnan Raghupathy <ramarag@microsoft.com> | 2016-12-16 10:31:45 -0800 |
---|---|---|
committer | Tarek Mahmoud Sayed <tarekms@microsoft.com> | 2016-12-16 10:31:45 -0800 |
commit | aeae8e110c4f93602f00a18ac1cdb3cb9d2700a9 (patch) | |
tree | b562f1dc8b99789b766fb21019c23003d1266a1e | |
parent | 98c1e2b811dd5292fb677d6def8a6e9b4564f676 (diff) | |
download | coreclr-aeae8e110c4f93602f00a18ac1cdb3cb9d2700a9.tar.gz coreclr-aeae8e110c4f93602f00a18ac1cdb3cb9d2700a9.tar.bz2 coreclr-aeae8e110c4f93602f00a18ac1cdb3cb9d2700a9.zip |
Makes CultureInfo.get_Parent thread safe (#8656)
-rw-r--r-- | src/mscorlib/src/System/Globalization/CultureInfo.cs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/mscorlib/src/System/Globalization/CultureInfo.cs b/src/mscorlib/src/System/Globalization/CultureInfo.cs index fd9b0ed98c..9f306c3c99 100644 --- a/src/mscorlib/src/System/Globalization/CultureInfo.cs +++ b/src/mscorlib/src/System/Globalization/CultureInfo.cs @@ -893,20 +893,20 @@ namespace System.Globalization { get { Contract.Ensures(Contract.Result<CultureInfo>() != null); + CultureInfo culture = null; if (null == m_parent) { try { string parentName = this.m_cultureData.SPARENT; - if (String.IsNullOrEmpty(parentName)) { - m_parent = InvariantCulture; + culture = InvariantCulture; } else { - m_parent = new CultureInfo(parentName, this.m_cultureData.UseUserOverride); + culture = new CultureInfo(parentName, this.m_cultureData.UseUserOverride); } } catch (ArgumentException) @@ -914,8 +914,10 @@ namespace System.Globalization { // 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. - m_parent = InvariantCulture; + culture = InvariantCulture; } + + Interlocked.CompareExchange<CultureInfo>(ref m_parent, culture, null); } return m_parent; } |