From 26d297a1019f27186a059762ee9fd583c8708c34 Mon Sep 17 00:00:00 2001 From: Davoud Eshtehari Date: Mon, 9 Jan 2023 14:53:31 -0800 Subject: [PATCH] fix read thread safe --- .../SqlClient/Reliability/SqlConfigurableRetryFactory.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs index 81c0597ea9..16bae39008 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryFactory.cs @@ -37,6 +37,7 @@ public sealed class SqlRetryLogicOption /// public sealed class SqlConfigurableRetryFactory { + private readonly static object s_syncObject = new(); /// Default known transient error numbers. private static readonly HashSet s_defaultTransientErrors = new HashSet @@ -115,7 +116,12 @@ private static bool TransientErrorsCondition(Exception e, IEnumerable retri { foreach (SqlError item in ex.Errors) { - if (retriableConditions.Contains(item.Number)) + bool retriable; + lock (s_syncObject) + { + retriable = retriableConditions.Contains(item.Number); + } + if (retriable) { SqlClientEventSource.Log.TryTraceEvent(" Found a transient error: number = <{2}>, message = <{3}>", nameof(SqlConfigurableRetryFactory), MethodBase.GetCurrentMethod().Name, item.Number, item.Message); result = true;