summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRama krishnan Raghupathy <ramarag@microsoft.com>2016-12-16 10:31:45 -0800
committerTarek Mahmoud Sayed <tarekms@microsoft.com>2016-12-16 10:31:45 -0800
commitaeae8e110c4f93602f00a18ac1cdb3cb9d2700a9 (patch)
treeb562f1dc8b99789b766fb21019c23003d1266a1e
parent98c1e2b811dd5292fb677d6def8a6e9b4564f676 (diff)
downloadcoreclr-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.cs10
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;
}