108 Mutex* tty_lock = NULL;
109
110 Mutex* RawMonitor_lock = NULL;
111 Mutex* PerfDataMemAlloc_lock = NULL;
112 Mutex* PerfDataManager_lock = NULL;
113 Mutex* OopMapCacheAlloc_lock = NULL;
114
115 Mutex* FreeList_lock = NULL;
116 Monitor* SecondaryFreeList_lock = NULL;
117 Mutex* OldSets_lock = NULL;
118 Monitor* RootRegionScan_lock = NULL;
119
120 Monitor* GCTaskManager_lock = NULL;
121
122 Mutex* Management_lock = NULL;
123 Monitor* Service_lock = NULL;
124 Monitor* PeriodicTask_lock = NULL;
125 Monitor* RedefineClasses_lock = NULL;
126
127 Monitor* HeapMonitor_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 Mutex* JfrThreadGroups_lock = NULL;
135 #endif
136
137 #ifndef SUPPORTS_NATIVE_CX8
138 Mutex* UnsafeJlong_lock = NULL;
139 #endif
140
141 #define MAX_NUM_MUTEX 128
142 static Monitor * _mutex_array[MAX_NUM_MUTEX];
143 static int _num_mutex;
144
145 #ifdef ASSERT
146 void assert_locked_or_safepoint(const Monitor * lock) {
147 // check if this thread owns the lock (common case)
259 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock
260 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always);
261 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always);
262 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
263 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks SymbolTable_lock
264
265 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
266 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management
267
268 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
269 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
270 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
271
272 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
273 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
274 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
275 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
276 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
277 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
278
279 def(HeapMonitor_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
280
281 if (WhiteBoxAPI) {
282 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
283 }
284
285 #if INCLUDE_TRACE
286 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
287 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
288 def(JfrThreadGroups_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always);
289 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
290 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
291 #endif
292
293 #ifndef SUPPORTS_NATIVE_CX8
294 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
295 #endif
296 }
297
298 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
299 if (SafepointSynchronize::is_at_safepoint()) {
|
108 Mutex* tty_lock = NULL;
109
110 Mutex* RawMonitor_lock = NULL;
111 Mutex* PerfDataMemAlloc_lock = NULL;
112 Mutex* PerfDataManager_lock = NULL;
113 Mutex* OopMapCacheAlloc_lock = NULL;
114
115 Mutex* FreeList_lock = NULL;
116 Monitor* SecondaryFreeList_lock = NULL;
117 Mutex* OldSets_lock = NULL;
118 Monitor* RootRegionScan_lock = NULL;
119
120 Monitor* GCTaskManager_lock = NULL;
121
122 Mutex* Management_lock = NULL;
123 Monitor* Service_lock = NULL;
124 Monitor* PeriodicTask_lock = NULL;
125 Monitor* RedefineClasses_lock = NULL;
126
127 Monitor* HeapMonitor_lock = NULL;
128 Monitor* HeapMonitorStorage_lock = NULL;
129
130 #if INCLUDE_TRACE
131 Mutex* JfrStacktrace_lock = NULL;
132 Monitor* JfrMsg_lock = NULL;
133 Mutex* JfrBuffer_lock = NULL;
134 Mutex* JfrStream_lock = NULL;
135 Mutex* JfrThreadGroups_lock = NULL;
136 #endif
137
138 #ifndef SUPPORTS_NATIVE_CX8
139 Mutex* UnsafeJlong_lock = NULL;
140 #endif
141
142 #define MAX_NUM_MUTEX 128
143 static Monitor * _mutex_array[MAX_NUM_MUTEX];
144 static int _num_mutex;
145
146 #ifdef ASSERT
147 void assert_locked_or_safepoint(const Monitor * lock) {
148 // check if this thread owns the lock (common case)
260 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock
261 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always);
262 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always);
263 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
264 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks SymbolTable_lock
265
266 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
267 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management
268
269 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
270 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
271 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
272
273 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
274 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
275 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
276 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
277 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
278 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
279
280 def(HeapMonitorStorage_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always);
281 def(HeapMonitor_lock , PaddedMonitor, nonleaf+1, true, Monitor::_safepoint_check_always);
282
283 if (WhiteBoxAPI) {
284 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
285 }
286
287 #if INCLUDE_TRACE
288 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
289 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
290 def(JfrThreadGroups_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always);
291 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
292 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
293 #endif
294
295 #ifndef SUPPORTS_NATIVE_CX8
296 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
297 #endif
298 }
299
300 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
301 if (SafepointSynchronize::is_at_safepoint()) {
|