Skip to content

Commit 9e8239f

Browse files
authored
Reference assembly loading fixes: 1) don't try to load assemblies already loaded, 2) Use ConcurrentDictionary in thread-safe way (#415)
1 parent dc8c662 commit 9e8239f

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

src/ProvidedTypes.fs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9039,6 +9039,7 @@ namespace ProviderImplementation.ProvidedTypes
90399039
let enqueueReferencedAssemblies(asm: Assembly) =
90409040
do sourceAssembliesQueue.Add (fun () ->
90419041
[| for referencedAssemblyName in asm.GetReferencedAssemblies() do
9042+
if not (sourceAssembliesTable_.ContainsKey referencedAssemblyName.Name) then
90429043
let referencedAssembly = try Assembly.Load(referencedAssemblyName) with _ -> null
90439044
if not (isNull referencedAssembly) then
90449045
yield referencedAssembly |])
@@ -9052,12 +9053,12 @@ namespace ProviderImplementation.ProvidedTypes
90529053
for q in qs do
90539054
for asm in q() do
90549055
let simpleName = asm.GetName().Name
9055-
if not (sourceAssembliesTable_.ContainsKey(simpleName)) then
9056-
sourceAssembliesTable_.[simpleName] <- asm
9056+
sourceAssembliesTable_.GetOrAdd(simpleName, fun k ->
90579057
sourceAssemblies_.Add asm
90589058
// Find the transitive closure of all referenced assemblies
90599059
enqueueReferencedAssemblies asm
9060-
9060+
asm
9061+
) |> ignore
90619062
sourceAssemblies_
90629063

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

0 commit comments

Comments
 (0)