Skip to content

Commit 76b83e6

Browse files
authored
Reference assembly loading fixes: 1) don't try to load assemblies already loaded, 2) Use ConcurrentDictionary in thread-safe way (dotnet#18377)
1 parent 1b5e389 commit 76b83e6

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

tests/service/data/TestTP/ProvidedTypes.fs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8907,6 +8907,7 @@ namespace ProviderImplementation.ProvidedTypes
89078907
let enqueueReferencedAssemblies(asm: Assembly) =
89088908
do sourceAssembliesQueue.Add (fun () ->
89098909
[| for referencedAssemblyName in asm.GetReferencedAssemblies() do
8910+
if not (sourceAssembliesTable_.ContainsKey referencedAssemblyName.Name) then
89108911
let referencedAssembly = try Assembly.Load(referencedAssemblyName) with _ -> null
89118912
if not (isNull referencedAssembly) then
89128913
yield referencedAssembly |])
@@ -8920,12 +8921,12 @@ namespace ProviderImplementation.ProvidedTypes
89208921
for q in qs do
89218922
for asm in q() do
89228923
let simpleName = asm.GetName().Name
8923-
if not (sourceAssembliesTable_.ContainsKey(simpleName)) then
8924-
sourceAssembliesTable_[simpleName] <- asm
8924+
sourceAssembliesTable_.GetOrAdd(simpleName, fun k ->
89258925
sourceAssemblies_.Add asm
89268926
// Find the transitive closure of all referenced assemblies
89278927
enqueueReferencedAssemblies asm
8928-
8928+
asm
8929+
) |> ignore
89298930
sourceAssemblies_
89308931

89318932
/// When translating quotations, Expr.Var's are translated to new variable respecting reference equality.

0 commit comments

Comments
 (0)