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