2424#include " peimagelayout.inl"
2525
2626#ifndef DACCESS_COMPILE
27- DomainAssembly::DomainAssembly (PEAssembly* pPEAssembly, LoaderAllocator* pLoaderAllocator) :
28- m_pAssembly(NULL ),
29- m_pPEAssembly(pPEAssembly),
30- m_pModule(NULL ),
31- m_fCollectible(pLoaderAllocator->IsCollectible ()),
32- m_NextDomainAssemblyInSameALC(NULL ),
33- m_pLoaderAllocator(pLoaderAllocator),
34- m_level(FILE_LOAD_CREATE),
35- m_loading(TRUE ),
36- m_pError(NULL ),
37- m_bDisableActivationCheck(FALSE ),
38- m_fHostAssemblyPublished(FALSE ),
39- m_debuggerFlags(DACF_NONE),
40- m_notifyflags(NOT_NOTIFIED),
41- m_fDebuggerUnloadStarted(FALSE )
27+ DomainAssembly::DomainAssembly (PEAssembly* pPEAssembly, LoaderAllocator* pLoaderAllocator, AllocMemTracker* memTracker)
28+ : m_pAssembly(NULL )
29+ , m_pPEAssembly(pPEAssembly)
30+ , m_pModule(NULL )
31+ , m_fCollectible(pLoaderAllocator->IsCollectible ())
32+ , m_NextDomainAssemblyInSameALC(NULL )
33+ , m_pLoaderAllocator(pLoaderAllocator)
34+ , m_level(FILE_LOAD_CREATE)
35+ , m_loading(TRUE )
36+ , m_pError(NULL )
37+ , m_bDisableActivationCheck(FALSE )
38+ , m_fHostAssemblyPublished(FALSE )
39+ , m_debuggerFlags(DACF_NONE)
40+ , m_notifyflags(NOT_NOTIFIED)
41+ , m_fDebuggerUnloadStarted(FALSE )
4242{
4343 CONTRACTL
4444 {
@@ -53,6 +53,18 @@ DomainAssembly::DomainAssembly(PEAssembly* pPEAssembly, LoaderAllocator* pLoader
5353 pPEAssembly->ValidateForExecution ();
5454
5555 SetupDebuggingConfig ();
56+
57+ // Create the Assembly
58+ NewHolder<Assembly> assembly = Assembly::Create (GetPEAssembly (), GetDebuggerInfoBits (), IsCollectible (), memTracker, IsCollectible () ? GetLoaderAllocator () : NULL );
59+ assembly->SetIsTenured ();
60+
61+ m_pAssembly = assembly.Extract ();
62+ m_pModule = m_pAssembly->GetModule ();
63+
64+ m_pAssembly->SetDomainAssembly (this );
65+
66+ // Creating the Assembly should have ensured the PEAssembly is loaded
67+ _ASSERT (GetPEAssembly ()->IsLoaded ());
5668}
5769
5870DomainAssembly::~DomainAssembly ()
@@ -319,12 +331,8 @@ BOOL DomainAssembly::DoIncrementalLoad(FileLoadLevel level)
319331 Begin ();
320332 break ;
321333
322- case FILE_LOAD_ALLOCATE:
323- Allocate ();
324- break ;
325-
326- case FILE_LOAD_POST_ALLOCATE:
327- PostAllocate ();
334+ case FILE_LOAD_BEFORE_TYPE_LOAD:
335+ BeforeTypeLoad ();
328336 break ;
329337
330338 case FILE_LOAD_EAGER_FIXUPS:
@@ -365,7 +373,7 @@ BOOL DomainAssembly::DoIncrementalLoad(FileLoadLevel level)
365373 return TRUE ;
366374}
367375
368- void DomainAssembly::PostAllocate ()
376+ void DomainAssembly::BeforeTypeLoad ()
369377{
370378 CONTRACTL
371379 {
@@ -482,19 +490,6 @@ void DomainAssembly::Activate()
482490 RETURN;
483491}
484492
485- void DomainAssembly::SetAssembly (Assembly* pAssembly)
486- {
487- STANDARD_VM_CONTRACT;
488-
489- _ASSERTE (pAssembly->GetModule ()->GetPEAssembly ()==m_pPEAssembly);
490- _ASSERTE (m_pAssembly == NULL );
491-
492- m_pAssembly = pAssembly;
493- m_pModule = pAssembly->GetModule ();
494-
495- pAssembly->SetDomainAssembly (this );
496- }
497-
498493void DomainAssembly::Begin ()
499494{
500495 STANDARD_VM_CONTRACT;
@@ -540,38 +535,6 @@ void DomainAssembly::UnregisterFromHostAssembly()
540535 }
541536}
542537
543- void DomainAssembly::Allocate ()
544- {
545- CONTRACTL
546- {
547- INSTANCE_CHECK;
548- STANDARD_VM_CHECK;
549- INJECT_FAULT (COMPlusThrowOM (););
550- PRECONDITION (m_pAssembly == NULL );
551- }
552- CONTRACTL_END;
553-
554- AllocMemTracker amTracker;
555- AllocMemTracker * pamTracker = &amTracker;
556-
557- Assembly * pAssembly;
558- {
559- // Order is important here - in the case of an exception, the Assembly holder must destruct before the AllocMemTracker declared above.
560- NewHolder<Assembly> assemblyHolder (NULL );
561-
562- assemblyHolder = pAssembly = Assembly::Create (GetPEAssembly (), GetDebuggerInfoBits (), this ->IsCollectible (), pamTracker, this ->IsCollectible () ? this ->GetLoaderAllocator () : NULL );
563- assemblyHolder->SetIsTenured ();
564-
565- pamTracker->SuppressRelease ();
566- assemblyHolder.SuppressRelease ();
567- }
568-
569- SetAssembly (pAssembly);
570-
571- // Creating the Assembly should have ensured the PEAssembly is loaded
572- _ASSERT (GetPEAssembly ()->IsLoaded ());
573- }
574-
575538void DomainAssembly::DeliverAsyncEvents ()
576539{
577540 CONTRACTL
0 commit comments