From 8cc1d790b1150a566425607da022812ceaa2cb3f Mon Sep 17 00:00:00 2001 From: Eirik Tsarpalis Date: Wed, 8 Nov 2023 18:14:44 +0000 Subject: [PATCH] Ensure that `JsonSerializerOptions.CachingContext` is a singleton. --- .../Json/Serialization/JsonSerializerOptions.Caching.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Caching.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Caching.cs index 5d00d08676a00b..68551c7eedf12a 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Caching.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Caching.cs @@ -9,6 +9,7 @@ using System.Runtime.ExceptionServices; using System.Text.Json.Serialization; using System.Text.Json.Serialization.Metadata; +using System.Threading; namespace System.Text.Json { @@ -24,7 +25,13 @@ internal CachingContext CacheContext get { Debug.Assert(IsReadOnly); - return _cachingContext ??= TrackedCachingContexts.GetOrCreate(this); + return _cachingContext ?? GetOrCreate(); + + CachingContext GetOrCreate() + { + CachingContext ctx = TrackedCachingContexts.GetOrCreate(this); + return Interlocked.CompareExchange(ref _cachingContext, ctx, null) ?? ctx; + } } }