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 8d3b88f commit 1a5d4c9
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);

/// <summary>
/// <icu/> Returns a <see cref="UCultureInfo"/> object for a <see cref="CultureInfo"/>.
Expand All @@ -27,7 +27,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 1a5d4c9

Please sign in to comment.