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 Monitor* SecondaryFreeList_lock = NULL;
120 Mutex* OldSets_lock = NULL;
121 Monitor* RootRegionScan_lock = NULL;
122
123 Monitor* GCTaskManager_lock = NULL;
124
125 Mutex* Management_lock = NULL;
126 Monitor* Service_lock = NULL;
127 Monitor* PeriodicTask_lock = NULL;
128 Monitor* RedefineClasses_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 #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)
148 if (IgnoreLockingAssertions) return;
149 assert(lock != NULL, "Need non-NULL lock");
266
267 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock
268 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always);
269 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always);
270 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
271 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks SymbolTable_lock
272
273 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
274 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management
275
276 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
277 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
278 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
279
280 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
281 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
282 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
283 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
284 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
285 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
286 if (WhiteBoxAPI) {
287 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
288 }
289
290 #if INCLUDE_TRACE
291 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
292 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
293 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
294 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
295 #endif
296
297 #ifndef SUPPORTS_NATIVE_CX8
298 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
299 #endif
300 }
301
302 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
303 if (SafepointSynchronize::is_at_safepoint()) {
304 _locked = false;
305 } else {
|
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 Monitor* SecondaryFreeList_lock = NULL;
120 Mutex* OldSets_lock = NULL;
121 Monitor* RootRegionScan_lock = NULL;
122
123 Monitor* GCTaskManager_lock = NULL;
124
125 Mutex* Management_lock = NULL;
126 Monitor* Service_lock = NULL;
127 Monitor* PeriodicTask_lock = NULL;
128 Monitor* RedefineClasses_lock = NULL;
129
130 Monitor* HeapMonitor_lock = NULL;
131 Monitor* HeapMonitorStorage_lock = NULL;
132
133 #if INCLUDE_TRACE
134 Mutex* JfrStacktrace_lock = NULL;
135 Monitor* JfrMsg_lock = NULL;
136 Mutex* JfrBuffer_lock = NULL;
137 Mutex* JfrStream_lock = NULL;
138 #endif
139
140 #ifndef SUPPORTS_NATIVE_CX8
141 Mutex* UnsafeJlong_lock = NULL;
142 #endif
143
144 #define MAX_NUM_MUTEX 128
145 static Monitor * _mutex_array[MAX_NUM_MUTEX];
146 static int _num_mutex;
147
148 #ifdef ASSERT
149 void assert_locked_or_safepoint(const Monitor * lock) {
150 // check if this thread owns the lock (common case)
151 if (IgnoreLockingAssertions) return;
152 assert(lock != NULL, "Need non-NULL 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
290 def(HeapMonitorStorage_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always);
291 def(HeapMonitor_lock , PaddedMonitor, nonleaf+1, true, Monitor::_safepoint_check_always);
292
293 if (WhiteBoxAPI) {
294 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
295 }
296
297 #if INCLUDE_TRACE
298 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
299 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
300 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
301 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
302 #endif
303
304 #ifndef SUPPORTS_NATIVE_CX8
305 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
306 #endif
307 }
308
309 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
310 if (SafepointSynchronize::is_at_safepoint()) {
311 _locked = false;
312 } else {
|