109 Mutex* Debug3_lock = NULL;
110
111 Mutex* tty_lock = NULL;
112
113 Mutex* RawMonitor_lock = NULL;
114 Mutex* PerfDataMemAlloc_lock = NULL;
115 Mutex* PerfDataManager_lock = NULL;
116 Mutex* OopMapCacheAlloc_lock = NULL;
117
118 Mutex* FreeList_lock = NULL;
119 Mutex* OldSets_lock = NULL;
120 Monitor* RootRegionScan_lock = NULL;
121
122 Monitor* GCTaskManager_lock = NULL;
123
124 Mutex* Management_lock = NULL;
125 Monitor* Service_lock = NULL;
126 Monitor* PeriodicTask_lock = NULL;
127 Monitor* RedefineClasses_lock = NULL;
128
129 #if INCLUDE_TRACE
130 Mutex* JfrStacktrace_lock = NULL;
131 Monitor* JfrMsg_lock = NULL;
132 Mutex* JfrBuffer_lock = NULL;
133 Mutex* JfrStream_lock = NULL;
134 #endif
135
136 #ifndef SUPPORTS_NATIVE_CX8
137 Mutex* UnsafeJlong_lock = NULL;
138 #endif
139 Monitor* CodeHeapStateAnalytics_lock = NULL;
140
141 Mutex* MetaspaceExpand_lock = NULL;
142
143 #define MAX_NUM_MUTEX 128
144 static Monitor * _mutex_array[MAX_NUM_MUTEX];
145 static int _num_mutex;
146
147 #ifdef ASSERT
148 void assert_locked_or_safepoint(const Monitor * lock) {
269
270 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock
271 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always);
272 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always);
273 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
274 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks SymbolTable_lock
275
276 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
277 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management
278
279 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
280 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
281 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
282
283 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
284 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
285 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
286 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
287 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
288 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
289 if (WhiteBoxAPI) {
290 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
291 }
292
293 #if INCLUDE_TRACE
294 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
295 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
296 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
297 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
298 #endif
299
300 #ifndef SUPPORTS_NATIVE_CX8
301 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
302 #endif
303
304 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
305 }
306
307 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
308 if (SafepointSynchronize::is_at_safepoint()) {
|
109 Mutex* Debug3_lock = NULL;
110
111 Mutex* tty_lock = NULL;
112
113 Mutex* RawMonitor_lock = NULL;
114 Mutex* PerfDataMemAlloc_lock = NULL;
115 Mutex* PerfDataManager_lock = NULL;
116 Mutex* OopMapCacheAlloc_lock = NULL;
117
118 Mutex* FreeList_lock = NULL;
119 Mutex* OldSets_lock = NULL;
120 Monitor* RootRegionScan_lock = NULL;
121
122 Monitor* GCTaskManager_lock = NULL;
123
124 Mutex* Management_lock = NULL;
125 Monitor* Service_lock = NULL;
126 Monitor* PeriodicTask_lock = NULL;
127 Monitor* RedefineClasses_lock = NULL;
128
129 Monitor* ThreadHeapSampler_lock = NULL;
130
131 #if INCLUDE_TRACE
132 Mutex* JfrStacktrace_lock = NULL;
133 Monitor* JfrMsg_lock = NULL;
134 Mutex* JfrBuffer_lock = NULL;
135 Mutex* JfrStream_lock = NULL;
136 #endif
137
138 #ifndef SUPPORTS_NATIVE_CX8
139 Mutex* UnsafeJlong_lock = NULL;
140 #endif
141 Monitor* CodeHeapStateAnalytics_lock = NULL;
142
143 Mutex* MetaspaceExpand_lock = NULL;
144
145 #define MAX_NUM_MUTEX 128
146 static Monitor * _mutex_array[MAX_NUM_MUTEX];
147 static int _num_mutex;
148
149 #ifdef ASSERT
150 void assert_locked_or_safepoint(const Monitor * lock) {
271
272 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock
273 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always);
274 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always);
275 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
276 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks SymbolTable_lock
277
278 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
279 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management
280
281 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
282 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
283 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
284
285 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
286 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
287 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
288 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
289 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
290 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
291
292 def(ThreadHeapSampler_lock , PaddedMonitor, nonleaf, false, Monitor::_safepoint_check_never);
293
294 if (WhiteBoxAPI) {
295 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
296 }
297
298 #if INCLUDE_TRACE
299 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
300 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
301 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
302 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
303 #endif
304
305 #ifndef SUPPORTS_NATIVE_CX8
306 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
307 #endif
308
309 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
310 }
311
312 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
313 if (SafepointSynchronize::is_at_safepoint()) {
|