From 97bfbacd0c45821d525bab25dd2a8d17bf6e5a79 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Mon, 25 May 2015 14:55:29 +0200 Subject: [PATCH] [corlib] TimeZoneInfo.GetSystemTimeZones should work as singleton. Fixes #29906 --- mcs/class/corlib/System/TimeZoneInfo.cs | 11 ++++++----- mcs/class/corlib/Test/System/TimeZoneInfoTest.cs | 6 ++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/mcs/class/corlib/System/TimeZoneInfo.cs b/mcs/class/corlib/System/TimeZoneInfo.cs index 0457583e4c0..dc144d38de6 100644 --- a/mcs/class/corlib/System/TimeZoneInfo.cs +++ b/mcs/class/corlib/System/TimeZoneInfo.cs @@ -639,16 +639,17 @@ namespace System info.AddValue ("SupportsDaylightSavingTime", SupportsDaylightSavingTime); } - //FIXME: change this to a generic Dictionary and allow caching for FindSystemTimeZoneById - private static List systemTimeZones; + static ReadOnlyCollection systemTimeZones; + public static ReadOnlyCollection GetSystemTimeZones () { if (systemTimeZones == null) { - systemTimeZones = new List (); - GetSystemTimeZones (systemTimeZones); + var tz = new List (); + GetSystemTimeZones (tz); + Interlocked.CompareExchange (ref systemTimeZones, new ReadOnlyCollection (tz), null); } - return new ReadOnlyCollection (systemTimeZones); + return systemTimeZones; } public TimeSpan GetUtcOffset (DateTime dateTime) diff --git a/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs b/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs index bdce606080e..7ed78fc26e3 100644 --- a/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs +++ b/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs @@ -664,6 +664,12 @@ namespace MonoTests.System [TestFixture] public class GetSystemTimeZonesTests { + [Test] + public void Identity () + { + Assert.AreSame (TimeZoneInfo.GetSystemTimeZones (), TimeZoneInfo.GetSystemTimeZones ()); + } + [Test] public void NotEmpty () { -- 2.25.1