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