From 589d6b4e31a551b738ae1de7187ce5440dfb7a13 Mon Sep 17 00:00:00 2001 From: Alan Strickland Date: Tue, 17 Aug 2021 13:36:15 +0100 Subject: [PATCH 1/2] Fix an issue with the ClientDependencySettings singleton pattern to ensure there is no race condition when loading the Providers. --- .../Config/ClientDependencySettings.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ClientDependency.Core/Config/ClientDependencySettings.cs b/src/ClientDependency.Core/Config/ClientDependencySettings.cs index 97039b5..e19254b 100644 --- a/src/ClientDependency.Core/Config/ClientDependencySettings.cs +++ b/src/ClientDependency.Core/Config/ClientDependencySettings.cs @@ -89,8 +89,14 @@ public static ClientDependencySettings Instance //double check if (_settings == null) { - _settings = new ClientDependencySettings(); - _loadProviders(); + var tmpSettings = new ClientDependencySettings(); + tmpSettings.LoadProviders(new HttpContextWrapper(HttpContext.Current)); + + System.Threading.Thread.MemoryBarrier(); + + _settings = tmpSettings; + + //_loadProviders(); } } } From b74865ad863c0d429297fe438f30989a669c840b Mon Sep 17 00:00:00 2001 From: Alan Strickland Date: Thu, 19 Aug 2021 12:46:02 +0100 Subject: [PATCH 2/2] Remove memory barrier that isn't required because _settings is marked volatile. --- src/ClientDependency.Core/Config/ClientDependencySettings.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ClientDependency.Core/Config/ClientDependencySettings.cs b/src/ClientDependency.Core/Config/ClientDependencySettings.cs index e19254b..779a181 100644 --- a/src/ClientDependency.Core/Config/ClientDependencySettings.cs +++ b/src/ClientDependency.Core/Config/ClientDependencySettings.cs @@ -92,11 +92,7 @@ public static ClientDependencySettings Instance var tmpSettings = new ClientDependencySettings(); tmpSettings.LoadProviders(new HttpContextWrapper(HttpContext.Current)); - System.Threading.Thread.MemoryBarrier(); - _settings = tmpSettings; - - //_loadProviders(); } } }