summaryrefslogtreecommitdiff
path: root/src/inc/CrstTypes.def
diff options
context:
space:
mode:
Diffstat (limited to 'src/inc/CrstTypes.def')
-rw-r--r--src/inc/CrstTypes.def781
1 files changed, 781 insertions, 0 deletions
diff --git a/src/inc/CrstTypes.def b/src/inc/CrstTypes.def
new file mode 100644
index 0000000000..bb6e710647
--- /dev/null
+++ b/src/inc/CrstTypes.def
@@ -0,0 +1,781 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+//
+// This file is used to describe the different types of Crst and their dependencies on other Crst types (in
+// terms of which types may be legally held while others are acquired).
+//
+// The CrstTypeTool utility is used to parse this file, verify that there are no logical inconsistencies (such
+// as a cycle in the dependencies) and generate an enum value and numerical ranking for each type. This
+// ranking is used by the runtime (in checked builds) to verify that none of the rules described below are
+// violated (which could lead to a deadlock).
+//
+// When you add a new Crst type you need to be aware of which Crst types may be already held when your Crst is
+// acquired and which other types may be subsequently acquired. You can then add a Crst definition to this
+// file and annotate it with those dependencies. Running CrstTypeTool will check to see if this introduces a
+// potential deadlock problem and if everything checks out will generate a new version of
+// file:CrstTypes.h (be sure to check this file out from TFS/SD before running CrstTypeTool).
+//
+// The format of this file is a very simple language. Comments are introduced with '//' and continue to the
+// end of the line. Keywords are case insensitive (Crst type names, however, are case sensitive since they'll
+// be translated directly to C++ enum values). Crst type names are used without the 'Crst' prefix used in C++
+// code (e.g. CrstAppDomainCache is referred to as AppDomainCache). The following words are reserved keywords
+// and may not be used as the names of Crst types:
+// Crst
+// End
+// AcquiredBefore
+// AcquiredAfter
+// Unordered
+// SameLevelAs
+//
+// Each Crst type definition has the following format (where [] indicates optional and ... indicates zero or
+// more repetitions):
+// Crst <type name>
+// [AcquiredBefore <type name>...]
+// [AcquiredAfter <type name>...]
+// [SameLevelAs <type name>...]
+// [Unordered]
+// End
+//
+// For example:
+// Crst Foo
+// AcquiredBefore Bar
+// AcquiredAfter Zob Baz
+// SameLevelAs Foo
+// End
+//
+// This introduces a new Crst type Foo (CrstFoo inside the runtime). This type may be legally acquired when
+// the current thread holds Crst instances of type Zob, Bar or even other instances of Foo. While Foo is held
+// it is legal to acquire Crsts of type Bar. Assuming that this definition does not introduce any dependency
+// cycles, CrstTypeTool will assign a numeric rank to CrstFoo that maximizes the chance that any other Crst
+// type interaction you didn't explicitly specify (e.g. holding Foo while taking a Crst of type Wibble) will
+// generate a ranking violation assert in the checked build.
+//
+// Note that the following set of definitions:
+// Crst A AcquiredBefore B End
+// Crst B End
+//
+// Crst A End
+// Crst B AcquiredAfter A End
+//
+// Crst A AcquiredBefore B End
+// Crst B AcquiredAfter A End
+//
+// are all equivalent. You are free to use whichever variant seems clearest to you (CrstTypeTool will tell you
+// if you introduce conflicting rules). Similarly "A SameLevelAs B" implies "B SameLevelAs A". The initial
+// contents of this file uses AcquiredBefore in preference to AcquiredAfter purely because it was generated
+// automatically by a profiling mechanism (the initial rules were seeded from observations of Crst usage while
+// running our test suites). Feel free to add meaningful comments to existing rules if you feel they can
+// usefully clarify the reasons for particular dependencies.
+//
+// CrstTypeTool is a csScript file at file:..\..\bin\CrstTypeTool.csScript. Simply typing "CrstTypeTool" from a
+// clrenv command window prompt should rebuild file:CrstTypes.h from the current CrstTypes.def (again,
+// remember to check out CrstTypes.h first).
+// Note: If you cannot run the script from command line, because of this error:
+// Script language type is unsupported.
+// Use /? for more help on usage.
+// Or because .csscript extension is not associated with anything on your machine,
+// Then use "csc.exe CrstTypeTool.csscript" from ClrEnv environment and run the resulting executable.
+//
+// Each Crst type definition is currently in alphabetical order. Please maintain this convention.
+//
+
+Crst AllowedFiles
+ AcquiredBefore JumpStubCache UniqueStack
+End
+
+Crst AppDomainCache
+ AcquiredBefore FusionBindContext FusionLoadContext LoaderHeap UniqueStack UnresolvedClassLock
+End
+
+Crst AppDomainHandleTable
+ AcquiredBefore AvailableParamTypes HandleTable IbcProfile SyncBlockCache SystemDomainDelayedUnloadList
+ ThreadStore SystemDomain
+End
+
+Crst ArgBasedStubCache
+End
+
+Crst AssemblyIdentityCache
+End
+
+Crst AssemblyLoader
+ AcquiredBefore DeadlockDetection UniqueStack
+End
+
+Crst AvailableClass
+ AcquiredBefore LoaderHeap
+End
+
+Crst AssemblyDependencyGraph
+End
+
+Crst AvailableParamTypes
+ AcquiredBefore FusionBindContext FusionLoadContext IbcProfile LoaderHeap
+End
+
+Crst BaseDomain
+ AcquiredBefore LoaderHeap UniqueStack
+End
+
+Crst CCompRC
+ Unordered
+End
+
+Crst Cer
+ AcquiredBefore JumpStubCache UniqueStack
+End
+
+Crst ClassFactInfoHash
+ AcquiredBefore SyncBlockCache ThreadStore
+End
+
+Crst ClassInit
+ AcquiredBefore DeadlockDetection IbcProfile
+ SameLevelAs Jit
+End
+
+Crst ClrNotification
+ Unordered
+End
+
+Crst CrstCLRPrivBinderLocalWinMDPath
+End
+
+Crst CLRPrivBinderMaps
+End
+
+Crst CLRPrivBinderMapsAdd
+ AcquiredBefore CLRPrivBinderMaps
+End
+
+Crst COMWrapperCache
+ AcquiredBefore HandleTable UniqueStack
+End
+
+Crst ConnectionNameTable
+End
+
+Crst Contexts
+ AcquiredBefore AvailableParamTypes Cer ClassInit DeadlockDetection DomainLocalBlock FuncPtrStubs
+ GlobalStrLiteralMap Jit LoaderHeap ModuleLookupTable RWLock SigConvert SingleUseLock
+ StubUnwindInfoHeapSegments SyncBlockCache TypeIDMap UnresolvedClassLock FusionClosure
+End
+
+Crst CoreCLRBinderLog
+ Unordered
+End
+
+Crst CSPCache
+ AcquiredBefore JumpStubCache
+End
+
+Crst DeadlockDetection
+End
+
+Crst DebuggerController
+ // AcquiredBefore DebuggerHeapLock DebuggerJitInfo LoaderHeap
+
+ // See bug: 581892. This has a conflict with CrstInstMethodHashTableRanking.
+ // The controller logic will be moved to OOP in V3, and so this lock will no longer be necessary.
+ // Fixing this in-proc would be difficult, and it would all be throwaway as we go oop.
+ Unordered
+End
+
+// This is a leaf debugger lock.
+Crst DebuggerFavorLock
+ AcquiredAfter DebuggerJitInfo DebuggerMutex
+End
+
+// This is the lock used by the DebuggerHeapExecutableMemoryAllocator for allocating/freeing memory.
+Crst DebuggerHeapExecMemLock
+End
+
+// Debugger Heap lock is the smallest of the debugger locks.
+Crst DebuggerHeapLock
+ AcquiredAfter DebuggerFavorLock DebuggerJitInfo DebuggerMutex
+ // Disabled per bug 581892
+ // AcquiredAfter DebuggerController
+End
+
+Crst DebuggerJitInfo
+ AcquiredBefore DebuggerHeapLock
+End
+
+// This is the major debugger lock.
+// It's the largest of the debugger locks.
+Crst DebuggerMutex
+ AcquiredBefore AvailableParamTypes ConnectionNameTable
+ DynamicIL LoaderHeap ModuleLookupTable ThreadStore
+
+ // Disabled per bug 581892
+ // AcquiredBefore DebuggerController
+ AcquiredBefore DebuggerHeapLock DebuggerJitInfo
+
+End
+
+// This lock is used only for testing data consistency (see code:DataTest::TestDataSafety)
+// and is released before taking any other lock except for CrstDataTest2
+Crst DataTest1
+ AcquiredAfter DebuggerMutex
+End
+
+// This lock is used only for testing data consistency (see code:DataTest::TestDataSafety)
+// and is released before taking any other lockCrst DataTest2
+Crst DataTest2
+ AcquiredAfter DataTest1
+End
+
+
+Crst DbgTransport
+End
+
+Crst DelegateToFPtrHash
+End
+
+Crst DomainLocalBlock
+ AcquiredBefore AppDomainHandleTable IbcProfile LoaderHeap SystemDomainDelayedUnloadList UniqueStack
+End
+
+Crst DynamicIL
+End
+
+Crst DynamicMT
+ AcquiredBefore IbcProfile
+End
+
+Crst DynLinkZapItems
+ AcquiredBefore LoaderHeap
+End
+
+Crst EventStore
+End
+
+Crst Exception
+End
+
+Crst ExecuteManLock
+ AcquiredBefore UniqueStack
+End
+
+Crst ExecuteManRangeLock
+End
+
+Crst FCall
+ AcquiredBefore LoaderHeap
+End
+
+Crst RetThunkCache
+ AcquiredBefore LoaderHeap
+End
+
+Crst FriendAccessCache
+ AcquiredBefore JumpStubCache UniqueStack
+End
+
+Crst FuncPtrStubs
+ AcquiredBefore IbcProfile LoaderHeap UniqueStack CodeFragmentHeap JumpStubCache PatchEntryPoint
+End
+
+Crst FusionAppCtx
+ AcquiredBefore FusionPolicyConfigPool FusionSingleUse FusionAssemblyDownload
+End
+
+Crst FusionAssemblyDownload
+ AcquiredBefore FusionDownload UniqueStack
+End
+
+Crst FusionBindResult
+End
+
+Crst FusionClb
+End
+
+Crst FusionClosure
+ AcquiredBefore FusionBindContext FusionLoadContext FusionAppCtx FusionClosureGraph DomainLocalBlock ModuleFixup
+End
+
+Crst FusionClosureGraph
+ AcquiredBefore FusionAppCtx FusionBindContext FusionLoadContext
+End
+
+Crst FusionConfigSettings
+End
+
+Crst FusionDownload
+End
+
+Crst FusionLoadContext
+ AcquiredBefore PEImage
+End
+
+Crst FusionBindContext
+ AcquiredBefore PEImage
+End
+
+Crst FusionLog
+ AcquiredBefore IbcProfile UniqueStack
+End
+
+Crst FusionWarningLog
+ AcquiredBefore FusionBindContext FusionLoadContext FusionLog
+End
+
+Crst FusionNgenIndex
+ AcquiredBefore SystemDomainDelayedUnloadList
+End
+
+Crst FusionNgenIndexPool
+ AcquiredBefore SystemDomainDelayedUnloadList
+End
+
+Crst FusionPcyCache
+End
+
+Crst FusionPolicyConfigPool
+ AcquiredBefore UniqueStack
+End
+
+Crst FusionSingleUse
+ AcquiredBefore PEImage
+End
+
+Crst FusionIsoLibInit
+End
+
+Crst NativeBinderInit
+ Unordered
+End
+
+Crst NativeImageCache
+ Unordered
+End
+
+Crst GCMemoryPressure
+End
+
+Crst GlobalStrLiteralMap
+ AcquiredBefore HandleTable IbcProfile SyncBlockCache SystemDomainDelayedUnloadList ThreadStore UniqueStack
+End
+
+Crst HandleTable
+ SameLevelAs HandleTable
+End
+
+Crst HostAssemblyMap
+End
+
+Crst HostAssemblyMapAdd
+ AcquiredBefore HostAssemblyMap
+End
+
+Crst IbcProfile
+End
+
+Crst IJWFixupData
+ AcquiredBefore FuncPtrStubs IJWHash LoaderHeap
+End
+
+Crst IJWHash
+End
+
+Crst ILStubGen
+ AcquiredBefore DeadlockDetection UniqueStack
+End
+
+Crst InstMethodHashTable
+ AcquiredBefore FusionBindContext FusionLoadContext LoaderHeap UniqueStack JumpStubCache
+End
+
+Crst InterfaceVTableMap
+End
+
+Crst Interop
+ AcquiredBefore AppDomainHandleTable AvailableParamTypes Cer ClassInit DeadlockDetection DomainLocalBlock
+ HandleTable InstMethodHashTable InteropData JitGenericHandleCache LoaderHeap SigConvert
+ StubDispatchCache StubUnwindInfoHeapSegments SyncBlockCache TypeIDMap UnresolvedClassLock
+End
+
+Crst InteropData
+ AcquiredBefore LoaderHeap UniqueStack
+End
+
+Crst IOThreadpoolWorker
+ AcquiredBefore ThreadIdDispenser ThreadStore
+End
+
+Crst IsJMCMethod
+End
+
+Crst ISymUnmanagedReader
+ AcquiredBefore PEImagePDBStream UniqueStack JumpStubCache
+End
+
+Crst Jit
+ AcquiredBefore DeadlockDetection JumpStubCache
+ SameLevelAs ClassInit
+End
+
+Crst JitGenericHandleCache
+End
+
+Crst JitPerf
+ Unordered
+End
+
+Crst JumpStubCache
+ AcquiredBefore ExecuteManRangeLock LoaderHeap SingleUseLock
+ AcquiredAfter AppDomainCache ExecuteManLock FusionAssemblyDownload FusionNgenIndex FusionNgenIndexPool
+ ILStubGen SharedBaseDomain ThreadpoolTimerQueue ThreadpoolWaitThreads
+ TPMethodTable TypeIDMap BaseDomain AssemblyLoader
+End
+
+Crst ListLock
+ Unordered
+End
+
+// Leaflock leveling, used for crsts that explicitly want to be a leaf lock
+Crst LeafLock
+End
+
+Crst LoaderAllocator
+ AcquiredBefore AppDomainHandleTable HandleTable UniqueStack ThreadStore
+ AcquiredAfter DomainLocalBlock
+End
+
+Crst LoaderAllocatorReferences
+ AcquiredBefore LoaderAllocator
+ AcquiredAfter PendingTypeLoadEntry InstMethodHashTable
+End
+
+Crst AssemblyList
+ AcquiredAfter LoaderAllocatorReferences ThreadStore AssemblyLoader
+End
+
+Crst LoaderHeap
+End
+
+Crst Mda
+End
+
+Crst MetadataTracker
+ Unordered
+End
+
+Crst StubCache
+ AcquiredBefore LoaderHeap
+End
+
+Crst ModIntPairList
+End
+
+Crst Module
+ AcquiredBefore LoaderHeap UniqueStack
+End
+
+Crst ModuleFixup
+ AcquiredBefore AppDomainHandleTable GlobalStrLiteralMap IbcProfile SyncBlockCache
+End
+
+Crst ModuleLookupTable
+ AcquiredBefore LoaderHeap
+End
+
+Crst MUThunkHash
+End
+
+Crst Nls
+End
+
+Crst ObjectList
+ SameLevelAs ObjectList
+End
+
+Crst OnEventManager
+End
+
+Crst PatchEntryPoint
+End
+
+Crst PEFileSecurityManager
+End
+
+Crst PEImage
+ AcquiredBefore UniqueStack
+End
+
+Crst ILFingerprintCache
+ AcquiredBefore PEImage
+End
+
+Crst PEImagePDBStream
+End
+
+Crst PendingTypeLoadEntry
+ AcquiredBefore AppDomainCache AppDomainHandleTable AssemblyLoader AvailableClass AvailableParamTypes
+ BaseDomain ClassInit DeadlockDetection DebuggerController DebuggerJitInfo DebuggerMutex
+ DomainLocalBlock DynLinkZapItems Exception ExecuteManRangeLock FuncPtrStubs
+ FusionAppCtx FusionAssemblyDownload FusionBindResult FusionClosure FusionDownload
+ FusionBindContext FusionLoadContext FusionNgenIndex FusionNgenIndexPool FusionPcyCache
+ FusionPolicyConfigPool FusionSingleUse GlobalStrLiteralMap HandleTable IbcProfile
+ IJWFixupData IJWHash ISymUnmanagedReader Jit JumpStubCache LoaderHeap ModIntPairList
+ Module ModuleLookupTable PEImage SecurityStackwalkCache SharedAssemblyCreate
+ SharedBaseDomain SigConvert SingleUseLock StubDispatchCache StubUnwindInfoHeapSegments
+ SyncBlockCache SystemDomain ThreadIdDispenser ThreadStore TypeIDMap UnresolvedClassLock
+ SameLevelAs PendingTypeLoadEntry
+End
+
+Crst PinHandle
+End
+
+// ProfilerGCRefDataFreeList synchronizes access to the profiler API's list of
+// free, previously allocated structures that track moved references and
+// root references during a GC.
+Crst ProfilerGCRefDataFreeList
+End
+
+// ProfilingAPIStatus serializes attempts to transition the global status
+// from state to state, and access to the ProfilerDetachInfo structure
+// between the thread executing DetachProfiler(), and the DetachThread
+// carrying out the evacuation order.
+Crst ProfilingAPIStatus
+End
+
+Crst PublisherCertificate
+End
+
+Crst RCWCache
+ AcquiredBefore IbcProfile LoaderHeap RCWCleanupList
+End
+
+Crst RCWRefCache
+ AcquiredBefore HandleTable
+End
+
+Crst RCWCleanupList
+End
+
+Crst ReDacl
+End
+
+Crst Reflection
+ AcquiredBefore LoaderHeap UnresolvedClassLock
+End
+
+// Used to synchronize all rejit information stored in a given AppDomain. One of these
+// crsts exist per domain (except the SharedDomain--see below)
+Crst ReJITDomainTable
+ AcquiredBefore LoaderHeap SingleUseLock DeadlockDetection JumpStubCache DebuggerController
+ AcquiredAfter ReJITGlobalRequest ThreadStore GlobalStrLiteralMap SystemDomain DebuggerMutex
+End
+
+// Same as ReJITDomainTable, but this is for the SharedDomain's ReJitManager. Only
+// reason we have a special type for the SharedDomain's ReJitManager is so that we can
+// explicitly level this guy differently from ReJITDomainTable, so that both the
+// SharedDomain's ReJitManager table lock AND one non-SharedDomain's ReJitManager table
+// lock may be held simultaneously. This is useful during ETW rundown.
+Crst ReJITSharedDomainTable
+ AcquiredBefore ReJITDomainTable
+ AcquiredAfter ReJITGlobalRequest ThreadStore GlobalStrLiteralMap SystemDomain DebuggerMutex
+End
+
+// Used to synchronize all global requests (which may span multiple AppDomains) which add
+// new functions to rejit tables, or request Reverts on existing functions in the rejit
+// tables. One of these crsts exist per runtime.
+Crst ReJITGlobalRequest
+ AcquiredBefore ThreadStore ReJITSharedDomainTable ReJITDomainTable SystemDomain
+End
+
+// ETW infrastructure uses this crst to protect a hash table of TypeHandles which is
+// used to remember which types have been logged (to avoid duplicate logging of the
+// same type).
+Crst EtwTypeLogHash
+ AcquiredAfter ThreadStore AllowedFiles Cer TPMethodTable
+ AcquiredBefore AvailableParamTypes ConnectionNameTable DeadlockDetection DebuggerController
+ DebuggerHeapLock DebuggerJitInfo DynamicIL ExecuteManRangeLock HandleTable IbcProfile
+ JitGenericHandleCache JumpStubCache LoaderHeap ModuleLookupTable ProfilingAPIStatus
+ ProfilerGCRefDataFreeList RWLock SingleUseLock SyncBlockCache SystemDomainDelayedUnloadList
+ ThreadIdDispenser ThreadStaticDataHashTable
+End
+
+Crst Remoting
+ AcquiredBefore AppDomainHandleTable AvailableParamTypes Cer ClassInit DeadlockDetection DebuggerController
+ DebuggerHeapLock DebuggerJitInfo DebuggerMutex DomainLocalBlock ExecuteManRangeLock
+ FuncPtrStubs GlobalStrLiteralMap HandleTable InstMethodHashTable Jit JitGenericHandleCache
+ JumpStubCache LoaderHeap StubCache Module ModuleLookupTable SecurityStackwalkCache SigConvert
+ SingleUseLock StubUnwindInfoHeapSegments SyncBlockCache SystemDomainDelayedUnloadList
+ ThreadStore UnresolvedClassLock PendingTypeLoadEntry
+End
+
+Crst RWLock
+End
+
+Crst SavedExceptionInfo
+ AcquiredBefore DebuggerController
+End
+
+Crst SaveModuleProfileData
+End
+
+Crst SecurityPolicyCache
+End
+
+Crst SecurityPolicyInit
+ AcquiredBefore SecurityPolicyCache
+End
+
+Crst SecurityStackwalkCache
+End
+
+Crst SharedAssemblyCreate
+ AcquiredBefore DeadlockDetection UniqueStack
+End
+
+Crst SharedBaseDomain
+ AcquiredBefore UniqueStack
+End
+
+Crst SigConvert
+ AcquiredBefore LoaderHeap
+End
+
+Crst SingleUseLock
+ AcquiredBefore ExecuteManRangeLock LoaderHeap UniqueStack DebuggerJitInfo
+End
+
+Crst UnwindInfoTableLock
+ AcquiredAfter StubUnwindInfoHeapSegments SingleUseLock
+ AcquiredBefore StressLog
+End
+
+Crst SpecialStatics
+End
+
+Crst StressLog
+ Unordered
+End
+
+Crst StrongName
+End
+
+Crst CodeFragmentHeap
+ AcquiredBefore SingleUseLock
+End
+
+Crst StubDispatchCache
+End
+
+Crst StubUnwindInfoHeapSegments
+ AcquiredAfter StubCache
+End
+
+Crst SyncBlockCache
+ AcquiredBefore ThreadIdDispenser
+End
+
+Crst SyncHashLock
+End
+
+Crst SystemBaseDomain
+End
+
+Crst SystemDomain
+ AcquiredBefore DebuggerMutex HandleTable IbcProfile SaveModuleProfileData SecurityPolicyCache
+ ThreadIdDispenser ThreadStore
+End
+
+Crst SystemDomainDelayedUnloadList
+End
+
+Crst ThreadIdDispenser
+End
+
+Crst ThreadpoolEventCache
+End
+
+Crst ThreadpoolTimerQueue
+ AcquiredBefore UniqueStack
+End
+
+Crst ThreadpoolWaitThreads
+ AcquiredBefore UniqueStack
+End
+
+Crst ThreadpoolWorker
+ AcquiredBefore ThreadIdDispenser ThreadStore
+End
+
+Crst ThreadStaticDataHashTable
+ AcquiredBefore SyncBlockCache
+End
+
+Crst ThreadStore
+ AcquiredBefore AvailableParamTypes ConnectionNameTable DeadlockDetection DebuggerController
+ DebuggerHeapLock DebuggerJitInfo DynamicIL ExecuteManRangeLock HandleTable IbcProfile
+ JitGenericHandleCache JumpStubCache LoaderHeap ModuleLookupTable ProfilingAPIStatus
+ ProfilerGCRefDataFreeList RWLock SingleUseLock SyncBlockCache SystemDomainDelayedUnloadList
+ ThreadIdDispenser ThreadStaticDataHashTable
+End
+
+Crst TPMethodTable
+ AcquiredBefore DebuggerHeapLock LoaderHeap UniqueStack AvailableParamTypes
+End
+
+Crst TypeIDMap
+ AcquiredBefore UniqueStack
+End
+
+Crst TypeEquivalenceMap
+ AcquiredBefore LoaderHeap
+End
+
+Crst UMThunkHash
+End
+
+Crst UniqueStack
+ AcquiredBefore LoaderHeap
+End
+
+Crst UnresolvedClassLock
+ AcquiredBefore AvailableParamTypes DynLinkZapItems IbcProfile JumpStubCache
+End
+
+Crst WrapperTemplate
+ AcquiredBefore IbcProfile
+End
+
+Crst UMEntryThunkCache
+ AcquiredBefore LoaderHeap
+End
+
+Crst PinnedByrefValidation
+End
+
+Crst AssemblyUsageLog
+End
+
+Crst VSDIndirectionCellLock
+ AcquiredBefore LoaderHeap
+End
+
+Crst MulticoreJitHash
+End
+
+Crst MulticoreJitManager
+ AcquiredBefore MulticoreJitHash ThreadStore
+End
+
+Crst WinRTFactoryCache
+ AcquiredBefore HandleTable
+End
+
+Crst SqmManager
+End
+
+Crst StackSampler
+End
+
+Crst InlineTrackingMap
+ AcquiredBefore IbcProfile
+End \ No newline at end of file