Fixes race in NamespaceCache (dotnet/corefx#36699)
authorMarco Rossignoli <marco.rossignoli@gmail.com>
Thu, 11 Apr 2019 20:53:08 +0000 (22:53 +0200)
committerStephen Toub <stoub@microsoft.com>
Thu, 11 Apr 2019 20:53:08 +0000 (16:53 -0400)
* fix race

* address PR feedback

* address PR feedback

Commit migrated from https://github.com/dotnet/corefx/commit/ce62a086814fdfecea1d6ba6657c3fb88763e1d6

src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/Internal/NamespaceCache.cs

index 34993b3..85dfbf2 100644 (file)
@@ -13,7 +13,7 @@ namespace System.Reflection.Metadata.Ecma335
     {
         private readonly MetadataReader _metadataReader;
         private readonly object _namespaceTableAndListLock = new object();
-        private Dictionary<NamespaceDefinitionHandle, NamespaceData> _namespaceTable;
+        private volatile Dictionary<NamespaceDefinitionHandle, NamespaceData> _namespaceTable;
         private NamespaceData _rootNamespace;
         private uint _virtualNamespaceCounter;
 
@@ -154,8 +154,8 @@ namespace System.Reflection.Metadata.Ecma335
                     }
                 }
 
-                _namespaceTable = namespaceTable;
                 _rootNamespace = namespaceTable[rootNamespace];
+                _namespaceTable = namespaceTable;
             }
         }