From 2f710f7ac8fad487c1671a8bf99f5658924155bd Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Mon, 31 Mar 2014 11:12:44 -0700 Subject: [PATCH] [corlib] Make invariant NumberFormatter thread static too as it has internal static state. Fixes #18599 --- mcs/class/corlib/System/NumberFormatter.cs | 1 + .../corlib/Test/System/NumberFormatterTest.cs | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/mcs/class/corlib/System/NumberFormatter.cs b/mcs/class/corlib/System/NumberFormatter.cs index fd697e77f41..c3016efc17b 100644 --- a/mcs/class/corlib/System/NumberFormatter.cs +++ b/mcs/class/corlib/System/NumberFormatter.cs @@ -775,6 +775,7 @@ namespace System [ThreadStatic] static NumberFormatter threadNumberFormatter; + [ThreadStatic] static NumberFormatter userFormatProvider; private static NumberFormatter GetInstance (IFormatProvider fp) diff --git a/mcs/class/corlib/Test/System/NumberFormatterTest.cs b/mcs/class/corlib/Test/System/NumberFormatterTest.cs index 5969c4be8b4..c0dce0e1d54 100644 --- a/mcs/class/corlib/Test/System/NumberFormatterTest.cs +++ b/mcs/class/corlib/Test/System/NumberFormatterTest.cs @@ -10,6 +10,7 @@ using System; using System.Globalization; using System.Threading; +using System.Text; using NUnit.Framework; @@ -4377,5 +4378,31 @@ namespace MonoTests.System Assert.AreEqual ("n 0001.13'", (-1.1345343).ToString (formatString, CultureInfo.InvariantCulture), "#2"); Assert.AreEqual ("0'", 0.0.ToString (formatString, CultureInfo.InvariantCulture), "#3"); } + + [Test] + public void TestInvariantThreading () + { + Thread[] th = new Thread[4]; + bool failed = false; + + for (int i = 0; i < th.Length; i++) { + th [i] = new Thread (() => { + for (int ii = 0; ii < 100; ++ii) { + var headers = new StringBuilder (); + headers.AppendFormat (CultureInfo.InvariantCulture, "{0} {1}", 100, "ok"); + if (headers.ToString () != "100 ok") { + failed = true; + } + } + }); + th [i].Start (); + } + + foreach (Thread t in th) { + t.Join (); + } + + Assert.IsFalse (failed); + } } } -- 2.25.1