Merge pull request #2630 from ellismg/fast-path-index-of
[platform/upstream/coreclr.git] / src / inc / CrstTypes.def
1 //
2 // Copyright (c) Microsoft. All rights reserved.
3 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
4 //
5
6 //
7 // This file is used to describe the different types of Crst and their dependencies on other Crst types (in
8 // terms of which types may be legally held while others are acquired).
9 //
10 // The CrstTypeTool utility is used to parse this file, verify that there are no logical inconsistencies (such
11 // as a cycle in the dependencies) and generate an enum value and numerical ranking for each type. This
12 // ranking is used by the runtime (in checked builds) to verify that none of the rules described below are
13 // violated (which could lead to a deadlock).
14 //
15 // When you add a new Crst type you need to be aware of which Crst types may be already held when your Crst is
16 // acquired and which other types may be subsequently acquired. You can then add a Crst definition to this
17 // file and annotate it with those dependencies. Running CrstTypeTool will check to see if this introduces a
18 // potential deadlock problem and if everything checks out will generate a new version of
19 // file:CrstTypes.h (be sure to check this file out from TFS/SD before running CrstTypeTool).
20 //
21 // The format of this file is a very simple language. Comments are introduced with '//' and continue to the
22 // end of the line. Keywords are case insensitive (Crst type names, however, are case sensitive since they'll
23 // be translated directly to C++ enum values). Crst type names are used without the 'Crst' prefix used in C++
24 // code (e.g. CrstAppDomainCache is referred to as AppDomainCache). The following words are reserved keywords
25 // and may not be used as the names of Crst types:
26 //      Crst
27 //      End
28 //      AcquiredBefore
29 //      AcquiredAfter
30 //      Unordered
31 //      SameLevelAs
32 //
33 // Each Crst type definition has the following format (where [] indicates optional and ... indicates zero or
34 // more repetitions):
35 //      Crst <type name>
36 //          [AcquiredBefore <type name>...]
37 //          [AcquiredAfter <type name>...]
38 //          [SameLevelAs <type name>...]
39 //          [Unordered]
40 //      End
41 //
42 // For example:
43 //      Crst Foo
44 //          AcquiredBefore Bar
45 //          AcquiredAfter Zob Baz
46 //          SameLevelAs Foo
47 //      End
48 //
49 // This introduces a new Crst type Foo (CrstFoo inside the runtime). This type may be legally acquired when
50 // the current thread holds Crst instances of type Zob, Bar or even other instances of Foo. While Foo is held
51 // it is legal to acquire Crsts of type Bar. Assuming that this definition does not introduce any dependency
52 // cycles, CrstTypeTool will assign a numeric rank to CrstFoo that maximizes the chance that any other Crst
53 // type interaction you didn't explicitly specify (e.g. holding Foo while taking a Crst of type Wibble) will
54 // generate a ranking violation assert in the checked build.
55 //
56 // Note that the following set of definitions:
57 //      Crst A AcquiredBefore B End
58 //      Crst B End
59 //
60 //      Crst A End
61 //      Crst B AcquiredAfter A End
62 //
63 //      Crst A AcquiredBefore B End
64 //      Crst B AcquiredAfter A End
65 //
66 // are all equivalent. You are free to use whichever variant seems clearest to you (CrstTypeTool will tell you
67 // if you introduce conflicting rules). Similarly "A SameLevelAs B" implies "B SameLevelAs A". The initial
68 // contents of this file uses AcquiredBefore in preference to AcquiredAfter purely because it was generated
69 // automatically by a profiling mechanism (the initial rules were seeded from observations of Crst usage while
70 // running our test suites). Feel free to add meaningful comments to existing rules if you feel they can
71 // usefully clarify the reasons for particular dependencies.
72 //
73 // CrstTypeTool is a csScript file at file:..\..\bin\CrstTypeTool.csScript. Simply typing "CrstTypeTool" from a
74 // clrenv command window prompt should rebuild file:CrstTypes.h from the current CrstTypes.def (again,
75 // remember to check out CrstTypes.h first).
76 // Note: If you cannot run the script from command line, because of this error:
77 //     Script language type is unsupported.
78 //     Use /? for more help on usage.
79 // Or because .csscript extension is not associated with anything on your machine,
80 // Then use "csc.exe CrstTypeTool.csscript" from ClrEnv environment and run the resulting executable.
81 //
82 // Each Crst type definition is currently in alphabetical order. Please maintain this convention.
83 //
84
85 Crst AllowedFiles
86     AcquiredBefore JumpStubCache UniqueStack
87 End
88
89 Crst AppDomainCache
90     AcquiredBefore FusionBindContext FusionLoadContext LoaderHeap UniqueStack UnresolvedClassLock
91 End
92
93 Crst AppDomainHandleTable
94     AcquiredBefore AvailableParamTypes HandleTable IbcProfile SyncBlockCache SystemDomainDelayedUnloadList
95                    ThreadStore SystemDomain
96 End
97
98 Crst ArgBasedStubCache
99 End
100
101 Crst AssemblyIdentityCache
102 End
103
104 Crst AssemblyLoader
105     AcquiredBefore DeadlockDetection UniqueStack
106 End
107
108 Crst AvailableClass
109     AcquiredBefore LoaderHeap
110 End
111
112 Crst AssemblyDependencyGraph
113 End
114
115 Crst AvailableParamTypes
116     AcquiredBefore FusionBindContext FusionLoadContext IbcProfile LoaderHeap
117 End
118
119 Crst BaseDomain
120     AcquiredBefore LoaderHeap UniqueStack
121 End
122
123 Crst CCompRC
124     Unordered
125 End
126
127 Crst Cer
128     AcquiredBefore JumpStubCache UniqueStack
129 End
130
131 Crst ClassFactInfoHash
132     AcquiredBefore SyncBlockCache ThreadStore
133 End
134
135 Crst ClassInit
136     AcquiredBefore DeadlockDetection IbcProfile
137     SameLevelAs Jit
138 End
139
140 Crst CrstCLRPrivBinderLocalWinMDPath
141 End
142
143 Crst CLRPrivBinderMaps
144 End
145
146 Crst CLRPrivBinderMapsAdd
147     AcquiredBefore CLRPrivBinderMaps
148 End
149
150 Crst COMWrapperCache
151     AcquiredBefore HandleTable UniqueStack
152 End
153
154 Crst ConnectionNameTable
155 End
156
157 Crst Contexts
158     AcquiredBefore AvailableParamTypes Cer ClassInit DeadlockDetection DomainLocalBlock FuncPtrStubs
159                    GlobalStrLiteralMap Jit LoaderHeap ModuleLookupTable RWLock SigConvert SingleUseLock
160                    StubUnwindInfoHeapSegments SyncBlockCache TypeIDMap UnresolvedClassLock FusionClosure
161 End
162
163 Crst CoreCLRBinderLog
164         Unordered
165 End
166
167 Crst CSPCache
168     AcquiredBefore JumpStubCache 
169 End
170
171 Crst DeadlockDetection
172 End
173
174 Crst DebuggerController
175     // AcquiredBefore DebuggerHeapLock DebuggerJitInfo LoaderHeap
176     
177     // See bug: 581892. This has a conflict with CrstInstMethodHashTableRanking.     
178     // The controller logic will be moved to OOP in V3, and so this lock will no longer be necessary.
179     // Fixing this in-proc would be difficult, and it would all be throwaway as we go oop.
180     Unordered
181 End
182
183 // This is a leaf debugger lock. 
184 Crst DebuggerFavorLock
185     AcquiredAfter DebuggerJitInfo DebuggerMutex
186 End
187
188 // This is the lock used by the DebuggerHeapExecutableMemoryAllocator for allocating/freeing memory.
189 Crst DebuggerHeapExecMemLock
190 End
191
192 // Debugger Heap lock is the smallest of the debugger locks.
193 Crst DebuggerHeapLock
194     AcquiredAfter DebuggerFavorLock DebuggerJitInfo DebuggerMutex
195     // Disabled per bug 581892
196     // AcquiredAfter DebuggerController 
197 End
198
199 Crst DebuggerJitInfo
200     AcquiredBefore DebuggerHeapLock
201 End
202
203 // This is the major debugger lock. 
204 // It's the largest of the debugger locks.
205 Crst DebuggerMutex
206     AcquiredBefore AvailableParamTypes ConnectionNameTable 
207                    DynamicIL LoaderHeap ModuleLookupTable ThreadStore                   
208
209     // Disabled per bug 581892
210     // AcquiredBefore DebuggerController 
211     AcquiredBefore DebuggerHeapLock DebuggerJitInfo
212
213 End
214
215 // This lock is used only for testing data consistency (see code:DataTest::TestDataSafety) 
216 // and is released before taking any other lock except for CrstDataTest2
217 Crst DataTest1
218     AcquiredAfter DebuggerMutex
219 End
220
221 // This lock is used only for testing data consistency (see code:DataTest::TestDataSafety) 
222 // and is released before taking any other lockCrst DataTest2
223 Crst DataTest2
224     AcquiredAfter DataTest1
225 End
226
227
228 Crst DbgTransport
229 End
230
231 Crst DelegateToFPtrHash
232 End
233
234 Crst DomainLocalBlock
235     AcquiredBefore AppDomainHandleTable IbcProfile LoaderHeap SystemDomainDelayedUnloadList UniqueStack
236 End
237
238 Crst DynamicIL
239 End
240
241 Crst DynamicMT
242     AcquiredBefore IbcProfile
243 End
244
245 Crst DynLinkZapItems
246     AcquiredBefore LoaderHeap
247 End
248
249 Crst EventStore
250 End
251
252 Crst Exception
253 End
254
255 Crst ExecuteManLock
256     AcquiredBefore UniqueStack
257 End
258
259 Crst ExecuteManRangeLock
260 End
261
262 Crst FCall
263     AcquiredBefore LoaderHeap
264 End
265
266 Crst RetThunkCache
267     AcquiredBefore LoaderHeap
268 End
269
270 Crst FriendAccessCache
271     AcquiredBefore JumpStubCache UniqueStack
272 End
273
274 Crst FuncPtrStubs
275     AcquiredBefore IbcProfile LoaderHeap UniqueStack CodeFragmentHeap JumpStubCache PatchEntryPoint
276 End
277
278 Crst FusionAppCtx
279     AcquiredBefore FusionPolicyConfigPool FusionSingleUse  FusionAssemblyDownload
280 End
281
282 Crst FusionAssemblyDownload
283     AcquiredBefore FusionDownload UniqueStack
284 End
285
286 Crst FusionBindResult
287 End
288
289 Crst FusionClb
290 End
291
292 Crst FusionClosure
293     AcquiredBefore FusionBindContext FusionLoadContext FusionAppCtx FusionClosureGraph DomainLocalBlock ModuleFixup
294 End
295
296 Crst FusionClosureGraph
297     AcquiredBefore FusionAppCtx FusionBindContext FusionLoadContext
298 End
299
300 Crst FusionConfigSettings
301 End
302
303 Crst FusionDownload
304 End
305
306 Crst FusionLoadContext
307     AcquiredBefore PEImage
308 End
309
310 Crst FusionBindContext
311     AcquiredBefore PEImage
312 End
313
314 Crst FusionLog
315     AcquiredBefore IbcProfile UniqueStack
316 End
317
318 Crst FusionWarningLog
319     AcquiredBefore FusionBindContext FusionLoadContext FusionLog
320 End
321
322 Crst FusionNgenIndex
323     AcquiredBefore SystemDomainDelayedUnloadList
324 End
325
326 Crst FusionNgenIndexPool
327     AcquiredBefore SystemDomainDelayedUnloadList
328 End
329
330 Crst FusionPcyCache
331 End
332
333 Crst FusionPolicyConfigPool
334      AcquiredBefore UniqueStack
335 End
336
337 Crst FusionSingleUse
338     AcquiredBefore PEImage
339 End
340
341 Crst FusionIsoLibInit
342 End
343
344 Crst NativeBinderInit
345     Unordered
346 End
347
348 Crst NativeImageCache
349     Unordered
350 End
351
352 Crst GCMemoryPressure
353 End
354
355 Crst GlobalStrLiteralMap
356     AcquiredBefore HandleTable IbcProfile SyncBlockCache SystemDomainDelayedUnloadList ThreadStore UniqueStack
357 End
358
359 Crst HandleTable
360     SameLevelAs HandleTable
361 End
362
363 Crst HostAssemblyMap
364 End
365
366 Crst HostAssemblyMapAdd
367     AcquiredBefore HostAssemblyMap
368 End
369
370 Crst IbcProfile
371 End
372
373 Crst IJWFixupData
374     AcquiredBefore FuncPtrStubs IJWHash LoaderHeap
375 End
376
377 Crst IJWHash
378 End
379
380 Crst ILStubGen
381     AcquiredBefore DeadlockDetection UniqueStack
382 End
383
384 Crst InstMethodHashTable
385     AcquiredBefore FusionBindContext FusionLoadContext LoaderHeap UniqueStack JumpStubCache
386 End
387
388 Crst InterfaceVTableMap
389 End
390
391 Crst Interop
392     AcquiredBefore AppDomainHandleTable AvailableParamTypes Cer ClassInit DeadlockDetection DomainLocalBlock
393                    HandleTable InstMethodHashTable InteropData JitGenericHandleCache LoaderHeap SigConvert
394                    StubDispatchCache StubUnwindInfoHeapSegments SyncBlockCache TypeIDMap UnresolvedClassLock
395 End
396
397 Crst InteropData
398     AcquiredBefore LoaderHeap UniqueStack
399 End
400
401 Crst IOThreadpoolWorker
402     AcquiredBefore ThreadIdDispenser ThreadStore
403 End
404
405 Crst IsJMCMethod
406 End
407
408 Crst ISymUnmanagedReader
409     AcquiredBefore PEImagePDBStream UniqueStack JumpStubCache
410 End
411
412 Crst Jit
413     AcquiredBefore DeadlockDetection JumpStubCache
414     SameLevelAs ClassInit
415 End
416
417 Crst JitGenericHandleCache
418 End
419
420 Crst JitPerf
421     Unordered
422 End
423
424 Crst JumpStubCache
425     AcquiredBefore ExecuteManRangeLock LoaderHeap SingleUseLock
426     AcquiredAfter AppDomainCache ExecuteManLock FusionAssemblyDownload FusionNgenIndex FusionNgenIndexPool 
427                   ILStubGen SharedBaseDomain ThreadpoolTimerQueue ThreadpoolWaitThreads 
428                   TPMethodTable TypeIDMap BaseDomain AssemblyLoader
429 End
430
431 Crst ListLock
432     Unordered
433 End
434
435 // Leaflock leveling, used for crsts that explicitly want to be a leaf lock
436 Crst LeafLock
437 End
438
439 Crst LoaderAllocator
440     AcquiredBefore AppDomainHandleTable HandleTable UniqueStack ThreadStore
441     AcquiredAfter DomainLocalBlock
442 End
443
444 Crst LoaderAllocatorReferences
445     AcquiredBefore LoaderAllocator
446     AcquiredAfter PendingTypeLoadEntry InstMethodHashTable
447 End
448
449 Crst AssemblyList
450     AcquiredAfter LoaderAllocatorReferences ThreadStore AssemblyLoader
451 End
452
453 Crst LoaderHeap
454 End
455
456 Crst Mda
457 End
458
459 Crst MetadataTracker
460     Unordered
461 End
462
463 Crst StubCache
464     AcquiredBefore LoaderHeap
465 End
466
467 Crst ModIntPairList
468 End
469
470 Crst Module
471     AcquiredBefore LoaderHeap UniqueStack
472 End
473
474 Crst ModuleFixup
475     AcquiredBefore AppDomainHandleTable GlobalStrLiteralMap IbcProfile SyncBlockCache
476 End
477
478 Crst ModuleLookupTable
479     AcquiredBefore LoaderHeap
480 End
481
482 Crst MUThunkHash
483 End
484
485 Crst Nls
486 End
487
488 Crst ObjectList
489     SameLevelAs ObjectList
490 End
491
492 Crst OnEventManager
493 End
494
495 Crst PatchEntryPoint
496 End
497
498 Crst PEFileSecurityManager
499 End
500
501 Crst PEImage
502     AcquiredBefore UniqueStack
503 End
504
505 Crst ILFingerprintCache
506     AcquiredBefore PEImage
507 End
508
509 Crst PEImagePDBStream
510 End
511
512 Crst PendingTypeLoadEntry
513     AcquiredBefore AppDomainCache AppDomainHandleTable AssemblyLoader AvailableClass AvailableParamTypes
514                    BaseDomain ClassInit DeadlockDetection DebuggerController DebuggerJitInfo DebuggerMutex
515                    DomainLocalBlock DynLinkZapItems Exception ExecuteManRangeLock FuncPtrStubs
516                    FusionAppCtx FusionAssemblyDownload FusionBindResult FusionClosure FusionDownload
517                    FusionBindContext FusionLoadContext FusionNgenIndex FusionNgenIndexPool FusionPcyCache
518                    FusionPolicyConfigPool FusionSingleUse GlobalStrLiteralMap HandleTable IbcProfile
519                    IJWFixupData IJWHash ISymUnmanagedReader Jit JumpStubCache LoaderHeap ModIntPairList
520                    Module ModuleLookupTable PEImage SecurityStackwalkCache SharedAssemblyCreate
521                    SharedBaseDomain SigConvert SingleUseLock StubDispatchCache StubUnwindInfoHeapSegments
522                    SyncBlockCache SystemDomain ThreadIdDispenser ThreadStore TypeIDMap UnresolvedClassLock
523     SameLevelAs PendingTypeLoadEntry
524 End
525
526 Crst PinHandle
527 End
528
529 // ProfilerGCRefDataFreeList synchronizes access to the profiler API's list of
530 // free, previously allocated structures that track moved references and
531 // root references during a GC.
532 Crst ProfilerGCRefDataFreeList
533 End
534
535 // ProfilingAPIStatus serializes attempts to transition the global status
536 // from state to state, and access to the ProfilerDetachInfo structure
537 // between the thread executing DetachProfiler(), and the DetachThread
538 // carrying out the evacuation order.
539 Crst ProfilingAPIStatus
540 End
541
542 Crst PublisherCertificate
543 End
544
545 Crst RCWCache
546     AcquiredBefore IbcProfile LoaderHeap RCWCleanupList
547 End
548
549 Crst RCWRefCache
550     AcquiredBefore HandleTable
551 End
552
553 Crst RCWCleanupList
554 End
555
556 Crst ReDacl
557 End
558
559 Crst Reflection
560     AcquiredBefore LoaderHeap UnresolvedClassLock
561 End
562
563 // Used to synchronize all rejit information stored in a given AppDomain.  One of these
564 // crsts exist per domain (except the SharedDomain--see below)
565 Crst ReJITDomainTable
566     AcquiredBefore LoaderHeap SingleUseLock DeadlockDetection JumpStubCache DebuggerController
567     AcquiredAfter ReJITGlobalRequest ThreadStore GlobalStrLiteralMap SystemDomain DebuggerMutex
568 End
569
570 // Same as ReJITDomainTable, but this is for the SharedDomain's ReJitManager.  Only
571 // reason we have a special type for the SharedDomain's ReJitManager is so that we can
572 // explicitly level this guy differently from ReJITDomainTable, so that both the
573 // SharedDomain's ReJitManager table lock AND one non-SharedDomain's ReJitManager table
574 // lock may be held simultaneously.  This is useful during ETW rundown.
575 Crst ReJITSharedDomainTable
576     AcquiredBefore ReJITDomainTable
577     AcquiredAfter ReJITGlobalRequest ThreadStore GlobalStrLiteralMap SystemDomain DebuggerMutex
578 End
579
580 // Used to synchronize all global requests (which may span multiple AppDomains) which add
581 // new functions to rejit tables, or request Reverts on existing functions in the rejit
582 // tables.  One of these crsts exist per runtime.
583 Crst ReJITGlobalRequest
584     AcquiredBefore ThreadStore ReJITSharedDomainTable ReJITDomainTable SystemDomain
585 End
586
587 // ETW infrastructure uses this crst to protect a hash table of TypeHandles which is
588 // used to remember which types have been logged (to avoid duplicate logging of the
589 // same type).
590 Crst EtwTypeLogHash
591     AcquiredAfter ThreadStore AllowedFiles Cer TPMethodTable
592     AcquiredBefore AvailableParamTypes ConnectionNameTable DeadlockDetection DebuggerController 
593                DebuggerHeapLock DebuggerJitInfo DynamicIL ExecuteManRangeLock HandleTable IbcProfile
594                JitGenericHandleCache JumpStubCache LoaderHeap ModuleLookupTable ProfilingAPIStatus
595                ProfilerGCRefDataFreeList RWLock SingleUseLock SyncBlockCache SystemDomainDelayedUnloadList
596                ThreadIdDispenser ThreadStaticDataHashTable
597 End
598
599 Crst Remoting
600     AcquiredBefore AppDomainHandleTable AvailableParamTypes Cer ClassInit DeadlockDetection DebuggerController
601                    DebuggerHeapLock DebuggerJitInfo DebuggerMutex DomainLocalBlock ExecuteManRangeLock
602                    FuncPtrStubs GlobalStrLiteralMap HandleTable InstMethodHashTable Jit JitGenericHandleCache
603                    JumpStubCache LoaderHeap StubCache Module ModuleLookupTable SecurityStackwalkCache SigConvert
604                    SingleUseLock StubUnwindInfoHeapSegments SyncBlockCache SystemDomainDelayedUnloadList
605                    ThreadStore UnresolvedClassLock PendingTypeLoadEntry
606 End
607
608 Crst RWLock
609 End
610
611 Crst SavedExceptionInfo
612     AcquiredBefore DebuggerController
613 End
614
615 Crst SaveModuleProfileData
616 End
617
618 Crst SecurityPolicyCache
619 End
620
621 Crst SecurityPolicyInit
622     AcquiredBefore SecurityPolicyCache
623 End
624
625 Crst SecurityStackwalkCache
626 End
627
628 Crst SharedAssemblyCreate
629     AcquiredBefore DeadlockDetection UniqueStack
630 End
631
632 Crst SharedBaseDomain
633     AcquiredBefore UniqueStack
634 End
635
636 Crst SigConvert
637     AcquiredBefore LoaderHeap
638 End
639
640 Crst SingleUseLock
641     AcquiredBefore ExecuteManRangeLock LoaderHeap UniqueStack DebuggerJitInfo
642 End
643
644 Crst UnwindInfoTableLock
645         AcquiredAfter StubUnwindInfoHeapSegments SingleUseLock
646     AcquiredBefore StressLog
647 End
648
649 Crst SpecialStatics
650 End
651
652 Crst StressLog
653     Unordered
654 End
655
656 Crst StrongName
657 End
658
659 Crst CodeFragmentHeap
660     AcquiredBefore SingleUseLock
661 End
662
663 Crst StubDispatchCache
664 End
665
666 Crst StubUnwindInfoHeapSegments
667     AcquiredAfter StubCache
668 End
669
670 Crst SyncBlockCache
671     AcquiredBefore ThreadIdDispenser
672 End
673
674 Crst SyncHashLock
675 End
676
677 Crst SystemBaseDomain
678 End
679
680 Crst SystemDomain
681     AcquiredBefore DebuggerMutex HandleTable IbcProfile SaveModuleProfileData SecurityPolicyCache
682                    ThreadIdDispenser ThreadStore
683 End
684
685 Crst SystemDomainDelayedUnloadList
686 End
687
688 Crst ThreadIdDispenser
689 End
690
691 Crst ThreadpoolEventCache
692 End
693
694 Crst ThreadpoolTimerQueue
695     AcquiredBefore UniqueStack
696 End
697
698 Crst ThreadpoolWaitThreads
699     AcquiredBefore UniqueStack
700 End
701
702 Crst ThreadpoolWorker
703     AcquiredBefore ThreadIdDispenser ThreadStore
704 End
705
706 Crst ThreadStaticDataHashTable
707     AcquiredBefore SyncBlockCache
708 End
709
710 Crst ThreadStore
711     AcquiredBefore AvailableParamTypes ConnectionNameTable DeadlockDetection DebuggerController 
712                    DebuggerHeapLock DebuggerJitInfo DynamicIL ExecuteManRangeLock HandleTable IbcProfile
713                    JitGenericHandleCache JumpStubCache LoaderHeap ModuleLookupTable ProfilingAPIStatus
714                    ProfilerGCRefDataFreeList RWLock SingleUseLock SyncBlockCache SystemDomainDelayedUnloadList
715                    ThreadIdDispenser ThreadStaticDataHashTable
716 End
717
718 Crst TPMethodTable
719     AcquiredBefore DebuggerHeapLock LoaderHeap UniqueStack AvailableParamTypes
720 End
721
722 Crst TypeIDMap
723     AcquiredBefore UniqueStack
724 End
725
726 Crst TypeEquivalenceMap
727     AcquiredBefore LoaderHeap
728 End
729
730 Crst UMThunkHash
731 End
732
733 Crst UniqueStack
734     AcquiredBefore LoaderHeap
735 End
736
737 Crst UnresolvedClassLock
738     AcquiredBefore AvailableParamTypes DynLinkZapItems IbcProfile JumpStubCache
739 End
740
741 Crst WrapperTemplate
742     AcquiredBefore IbcProfile
743 End
744
745 Crst UMEntryThunkCache
746     AcquiredBefore LoaderHeap
747 End
748
749 Crst PinnedByrefValidation
750 End
751
752 Crst AssemblyUsageLog
753 End
754
755 Crst VSDIndirectionCellLock
756     AcquiredBefore LoaderHeap
757 End
758
759 Crst MulticoreJitHash
760 End
761
762 Crst MulticoreJitManager
763     AcquiredBefore MulticoreJitHash ThreadStore
764 End
765
766 Crst WinRTFactoryCache
767     AcquiredBefore HandleTable    
768 End
769
770 Crst SqmManager 
771 End
772
773 Crst StackSampler
774 End
775
776 Crst InlineTrackingMap
777     AcquiredBefore IbcProfile
778 End