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* ThreadHeapSampler_lock = NULL;
131
132 #if INCLUDE_TRACE
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
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) {
149 // check if this thread owns the lock (common case)
150 if (IgnoreLockingAssertions) return;
151 assert(lock != NULL, "Need non-NULL lock");
268
269 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock
270 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always);
271 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always);
272 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
273 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks SymbolTable_lock
274
275 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
276 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management
277
278 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
279 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
280 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
281
282 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
283 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
284 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
285 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
286 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
287 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
288
289 def(ThreadHeapSampler_lock , PaddedMonitor, nonleaf, false, Monitor::_safepoint_check_never);
290
291 if (WhiteBoxAPI) {
292 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
293 }
294
295 #if INCLUDE_TRACE
296 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
297 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
298 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
299 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
300 #endif
301
302 #ifndef SUPPORTS_NATIVE_CX8
303 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
304 #endif
305 }
306
307 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
308 if (SafepointSynchronize::is_at_safepoint()) {
309 _locked = false;
310 } else {
|