Fix Issue#55518 (#56668)
authorNikitin A. Kirill <nikitin.a.kirill@gmail.com>
Fri, 6 Aug 2021 11:31:03 +0000 (15:31 +0400)
committerGitHub <noreply@github.com>
Fri, 6 Aug 2021 11:31:03 +0000 (13:31 +0200)
src/coreclr/vm/assembly.cpp

index 9ef8f08..2c64145 100644 (file)
@@ -579,6 +579,13 @@ Assembly *Assembly::CreateDynamic(AppDomain *pDomain, ICLRPrivBinder* pBinderCon
     {
         GCX_PREEMP();
 
+        AssemblyLoaderAllocator* pBinderAssemblyLoaderAllocator = nullptr;
+
+        if (pBinderContext != nullptr)
+        {
+            pBinderContext->GetLoaderAllocator((LPVOID*)&pBinderAssemblyLoaderAllocator);
+        }
+
         // Create a new LoaderAllocator if appropriate
         if ((args->access & ASSEMBLY_ACCESS_COLLECT) != 0)
         {
@@ -595,17 +602,15 @@ Assembly *Assembly::CreateDynamic(AppDomain *pDomain, ICLRPrivBinder* pBinderCon
             // atomically transfered by call to LoaderAllocator::ActivateManagedTracking().
             pAssemblyLoaderAllocator->SetupManagedTracking(&args->loaderAllocator);
             createdNewAssemblyLoaderAllocator = TRUE;
-        }
-        else
-        {
-            AssemblyLoaderAllocator* pAssemblyLoaderAllocator = nullptr;
 
-            if (pBinderContext != nullptr)
+            if(pBinderAssemblyLoaderAllocator != nullptr)
             {
-                pBinderContext->GetLoaderAllocator((LPVOID*)&pAssemblyLoaderAllocator);
+                pAssemblyLoaderAllocator->EnsureReference(pBinderAssemblyLoaderAllocator);
             }
-
-            pLoaderAllocator = pAssemblyLoaderAllocator == nullptr ? pDomain->GetLoaderAllocator() : pAssemblyLoaderAllocator;
+        }
+        else
+        {
+            pLoaderAllocator = pBinderAssemblyLoaderAllocator == nullptr ? pDomain->GetLoaderAllocator() : pBinderAssemblyLoaderAllocator;
         }
 
         if (!createdNewAssemblyLoaderAllocator)