Skip to content

Commit

Permalink
ICU4N.Support.Globalization.CultureInfoExtensions: Made TValue of Con…
Browse files Browse the repository at this point in the history
…currentDictionary into a Lazy<T> to ensure two threads cannot load the cache at the same time. (fixes #31)
  • Loading branch information
NightOwl888 committed Mar 9, 2021
1 parent 2b319e5 commit b49423a
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/ICU4N/Support/Globalization/CultureInfoExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ namespace ICU4N.Globalization
/// </summary>
public static class CultureInfoExtensions
{
private static readonly LurchTable<CultureInfo, UCultureInfo> uCultureInfoCache
= new LurchTable<CultureInfo, UCultureInfo>(LurchTableOrder.Access, limit: 64, comparer: CultureInfoEqualityComparer.Instance);
private static readonly LurchTable<CultureInfo, Lazy<UCultureInfo>> uCultureInfoCache
= new LurchTable<CultureInfo, Lazy<UCultureInfo>>(LurchTableOrder.Access, limit: 64, comparer: CultureInfoEqualityComparer.Instance);

static CultureInfoExtensions()
{
Expand All @@ -34,7 +34,8 @@ public static UCultureInfo ToUCultureInfo(this CultureInfo culture)
//if (culture is UCultureInfo uCulture)
// return uCulture;

return uCultureInfoCache.GetOrAdd(culture, (key) => UCultureInfo.DotNetLocaleHelper.ToUCultureInfo(key));
var result = uCultureInfoCache.GetOrAdd(culture, (key) => new Lazy<UCultureInfo>(() => UCultureInfo.DotNetLocaleHelper.ToUCultureInfo(key)));
return result.Value;
}

// ICU4N: For now, we are just comparing using CultureInfo.Equals() as well as comparing
Expand Down

0 comments on commit b49423a

Please sign in to comment.