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