diff options
author | Tarek Mahmoud Sayed <tarekms@microsoft.com> | 2016-04-06 16:24:35 -0700 |
---|---|---|
committer | Tarek Mahmoud Sayed <tarekms@microsoft.com> | 2016-04-06 16:24:35 -0700 |
commit | e609a4f2272412f0ad3ce1f8e22c2b4d0740388f (patch) | |
tree | 73d72f9018d13527017f7aedcfe61a381e364a42 /src | |
parent | e3ad4b489429edd6d7f8315e0bc218c32bf6315f (diff) | |
parent | 6d62f71aa8eef7e5fd88176f0048f00cfcda24cf (diff) | |
download | coreclr-e609a4f2272412f0ad3ce1f8e22c2b4d0740388f.tar.gz coreclr-e609a4f2272412f0ad3ce1f8e22c2b4d0740388f.tar.bz2 coreclr-e609a4f2272412f0ad3ce1f8e22c2b4d0740388f.zip |
Merge pull request #4119 from tarekgh/FixAsyncCurrentCulture
Make current culture travel with async operations on Linux
Diffstat (limited to 'src')
-rw-r--r-- | src/mscorlib/corefx/System/Globalization/CultureInfo.cs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/mscorlib/corefx/System/Globalization/CultureInfo.cs b/src/mscorlib/corefx/System/Globalization/CultureInfo.cs index 2be61f69dc..e5e01be032 100644 --- a/src/mscorlib/corefx/System/Globalization/CultureInfo.cs +++ b/src/mscorlib/corefx/System/Globalization/CultureInfo.cs @@ -133,6 +133,19 @@ namespace System.Globalization //The parent culture. private CultureInfo m_parent; + static AsyncLocal<CultureInfo> s_asyncLocalCurrentCulture; + static AsyncLocal<CultureInfo> s_asyncLocalCurrentUICulture; + + static void AsyncLocalSetCurrentCulture(AsyncLocalValueChangedArgs<CultureInfo> args) + { + s_currentThreadCulture = args.CurrentValue; + } + + static void AsyncLocalSetCurrentUICulture(AsyncLocalValueChangedArgs<CultureInfo> args) + { + s_currentThreadUICulture = args.CurrentValue; + } + // // The CultureData instance that reads the data provided by our CultureData class. // @@ -311,7 +324,13 @@ namespace System.Globalization { throw new ArgumentNullException("value"); } - s_currentThreadCulture = value; + + if (s_asyncLocalCurrentCulture == null) + { + Interlocked.CompareExchange(ref s_asyncLocalCurrentCulture, new AsyncLocal<CultureInfo>(AsyncLocalSetCurrentCulture), null); + } + // this one will set s_currentThreadCulture too + s_asyncLocalCurrentCulture.Value = value; } } @@ -355,8 +374,14 @@ namespace System.Globalization } CultureInfo.VerifyCultureName(value, true); + + if (s_asyncLocalCurrentUICulture == null) + { + Interlocked.CompareExchange(ref s_asyncLocalCurrentUICulture, new AsyncLocal<CultureInfo>(AsyncLocalSetCurrentUICulture), null); + } - s_currentThreadUICulture = value; + // this one will set s_currentThreadUICulture too + s_asyncLocalCurrentUICulture.Value = value; } } |