From 4e54dfd0af0768050f7f6d0a85a4968ba0e60025 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 8 May 2024 11:34:30 +0300 Subject: [PATCH 1/2] Make the readers dictionary in the registry concurrent to avoid corrupting the dictionary's state when running concurrent operations --- src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs b/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs index 6605c12f7..2d967dad9 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System; +using System.Collections.Concurrent; using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; @@ -12,7 +13,7 @@ namespace Microsoft.OpenApi.Reader /// public static class OpenApiReaderRegistry { - private static readonly Dictionary _readers = new(StringComparer.OrdinalIgnoreCase); + private static readonly ConcurrentDictionary _readers = new(StringComparer.OrdinalIgnoreCase); /// /// Defines a default OpenAPI reader. From 15ce520692a37c7254da4e15a2c26b1b6531ad59 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 8 May 2024 16:02:40 +0300 Subject: [PATCH 2/2] Implement PR feedback --- src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs b/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs index 2d967dad9..e1eea86a1 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs @@ -27,7 +27,7 @@ public static class OpenApiReaderRegistry /// The reader instance. public static void RegisterReader(string format, IOpenApiReader reader) { - _readers[format] = reader; + _readers.AddOrUpdate(format, reader, (_, _) => reader); } ///