89 Mutex* MarkStackFreeList_lock = NULL;
90 Mutex* MarkStackChunkList_lock = NULL;
91 Mutex* MonitoringSupport_lock = NULL;
92 Mutex* ParGCRareEvent_lock = NULL;
93 Mutex* DerivedPointerTableGC_lock = NULL;
94 Monitor* CGCPhaseManager_lock = NULL;
95 Mutex* Compile_lock = NULL;
96 Monitor* MethodCompileQueue_lock = NULL;
97 Monitor* CompileThread_lock = NULL;
98 Monitor* Compilation_lock = NULL;
99 Mutex* CompileTaskAlloc_lock = NULL;
100 Mutex* CompileStatistics_lock = NULL;
101 Mutex* DirectivesStack_lock = NULL;
102 Mutex* MultiArray_lock = NULL;
103 Monitor* Terminator_lock = NULL;
104 Monitor* BeforeExit_lock = NULL;
105 Monitor* Notify_lock = NULL;
106 Mutex* ProfilePrint_lock = NULL;
107 Mutex* ExceptionCache_lock = NULL;
108 Mutex* OsrList_lock = NULL;
109
110 #ifndef PRODUCT
111 Mutex* FullGCALot_lock = NULL;
112 #endif
113
114 Mutex* Debug1_lock = NULL;
115 Mutex* Debug2_lock = NULL;
116 Mutex* Debug3_lock = NULL;
117
118 Mutex* tty_lock = NULL;
119
120 Mutex* RawMonitor_lock = NULL;
121 Mutex* PerfDataMemAlloc_lock = NULL;
122 Mutex* PerfDataManager_lock = NULL;
123 Mutex* OopMapCacheAlloc_lock = NULL;
124
125 Mutex* FreeList_lock = NULL;
126 Mutex* OldSets_lock = NULL;
127 Monitor* RootRegionScan_lock = NULL;
128
129 Monitor* GCTaskManager_lock = NULL;
130
131 Mutex* Management_lock = NULL;
132 Monitor* Service_lock = NULL;
133 Monitor* PeriodicTask_lock = NULL;
134 Monitor* RedefineClasses_lock = NULL;
135
136 #if INCLUDE_JFR
137 Mutex* JfrStacktrace_lock = NULL;
138 Monitor* JfrMsg_lock = NULL;
139 Mutex* JfrBuffer_lock = NULL;
140 Mutex* JfrStream_lock = NULL;
141 #endif
142
143 #ifndef SUPPORTS_NATIVE_CX8
144 Mutex* UnsafeJlong_lock = NULL;
145 #endif
146 Monitor* CodeHeapStateAnalytics_lock = NULL;
147
148 Mutex* MetaspaceExpand_lock = NULL;
149 Mutex* ClassLoaderDataGraph_lock = NULL;
150
151 #define MAX_NUM_MUTEX 128
152 static Monitor * _mutex_array[MAX_NUM_MUTEX];
153 static int _num_mutex;
154
155 #ifdef ASSERT
156 void assert_locked_or_safepoint(const Monitor * lock) {
157 // check if this thread owns the lock (common case)
158 if (IgnoreLockingAssertions) return;
159 assert(lock != NULL, "Need non-NULL lock");
160 if (lock->owned_by_self()) return;
161 if (SafepointSynchronize::is_at_safepoint()) return;
162 if (!Universe::is_fully_initialized()) return;
163 // see if invoker of VM operation owns it
164 VM_Operation* op = VMThread::vm_operation();
165 if (op != NULL && op->calling_thread() == lock->owner()) return;
166 fatal("must own lock %s", lock->name());
167 }
168
169 // a weaker assertion than the above
226 def(MarkStackFreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
227 def(MarkStackChunkList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
228
229 def(MonitoringSupport_lock , PaddedMutex , native , true, Monitor::_safepoint_check_never); // used for serviceability monitoring support
230 }
231 def(ParGCRareEvent_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_sometimes);
232 def(DerivedPointerTableGC_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
233 def(CGCPhaseManager_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_sometimes);
234 def(CodeCache_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
235 def(RawMonitor_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
236 def(OopMapCacheAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for oop_map_cache allocation.
237
238 def(MetaspaceExpand_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never);
239 def(ClassLoaderDataGraph_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always);
240
241 def(Patching_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); // used for safepointing and code patching.
242 def(Service_lock , PaddedMonitor, special, true, Monitor::_safepoint_check_never); // used for service thread operations
243 def(JmethodIdCreation_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for creating jmethodIDs.
244
245 def(SystemDictionary_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread
246 def(SharedDictionary_lock , PaddedMutex, leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread
247 def(Module_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_always);
248 def(InlineCacheBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always);
249 def(VMStatistic_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always);
250 def(ExpandHeap_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // Used during compilation by VM thread
251 def(JNIHandleBlockFreeList_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never); // handles are used by VM thread
252 def(SignatureHandlerLibrary_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always);
253 def(SymbolArena_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_never);
254 def(StringTable_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always);
255 def(ProfilePrint_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing
256 def(ExceptionCache_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing
257 def(OsrList_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
258 def(Debug1_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
259 #ifndef PRODUCT
260 def(FullGCALot_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // a lock to make FullGCALot MT safe
261 #endif
262 def(BeforeExit_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
263 def(PerfDataMemAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for allocating PerfData memory for performance data
264 def(PerfDataManager_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for synchronized access to PerfDataManager resources
265
266 // CMS_modUnionTable_lock leaf
301 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
302 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
303 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
304
305 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
306 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
307 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
308 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
309 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
310 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
311
312 if (WhiteBoxAPI) {
313 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
314 }
315
316 #if INCLUDE_JFR
317 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
318 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
319 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
320 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
321 #endif
322
323 #ifndef SUPPORTS_NATIVE_CX8
324 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
325 #endif
326
327 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
328 }
329
330 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
331 if (SafepointSynchronize::is_at_safepoint()) {
332 _locked = false;
333 } else {
334 _mutex = mutex;
335 _locked = true;
336 _mutex->lock();
337 }
338 }
339
340 // Print all mutexes/monitors that are currently owned by a thread; called
341 // by fatal error handler.
342 void print_owned_locks_on_error(outputStream* st) {
343 st->print("VM Mutex/Monitor currently owned by a thread: ");
344 bool none = true;
345 for (int i = 0; i < _num_mutex; i++) {
346 // see if it has an owner
347 if (_mutex_array[i]->owner() != NULL) {
|
89 Mutex* MarkStackFreeList_lock = NULL;
90 Mutex* MarkStackChunkList_lock = NULL;
91 Mutex* MonitoringSupport_lock = NULL;
92 Mutex* ParGCRareEvent_lock = NULL;
93 Mutex* DerivedPointerTableGC_lock = NULL;
94 Monitor* CGCPhaseManager_lock = NULL;
95 Mutex* Compile_lock = NULL;
96 Monitor* MethodCompileQueue_lock = NULL;
97 Monitor* CompileThread_lock = NULL;
98 Monitor* Compilation_lock = NULL;
99 Mutex* CompileTaskAlloc_lock = NULL;
100 Mutex* CompileStatistics_lock = NULL;
101 Mutex* DirectivesStack_lock = NULL;
102 Mutex* MultiArray_lock = NULL;
103 Monitor* Terminator_lock = NULL;
104 Monitor* BeforeExit_lock = NULL;
105 Monitor* Notify_lock = NULL;
106 Mutex* ProfilePrint_lock = NULL;
107 Mutex* ExceptionCache_lock = NULL;
108 Mutex* OsrList_lock = NULL;
109 Mutex* NMethodSweeper_stat_lock = NULL;
110 #ifndef PRODUCT
111 Mutex* FullGCALot_lock = NULL;
112 #endif
113
114 Mutex* Debug1_lock = NULL;
115 Mutex* Debug2_lock = NULL;
116 Mutex* Debug3_lock = NULL;
117
118 Mutex* tty_lock = NULL;
119
120 Mutex* RawMonitor_lock = NULL;
121 Mutex* PerfDataMemAlloc_lock = NULL;
122 Mutex* PerfDataManager_lock = NULL;
123 Mutex* OopMapCacheAlloc_lock = NULL;
124
125 Mutex* FreeList_lock = NULL;
126 Mutex* OldSets_lock = NULL;
127 Monitor* RootRegionScan_lock = NULL;
128
129 Monitor* GCTaskManager_lock = NULL;
130
131 Mutex* Management_lock = NULL;
132 Monitor* Service_lock = NULL;
133 Monitor* PeriodicTask_lock = NULL;
134 Monitor* RedefineClasses_lock = NULL;
135
136 #if INCLUDE_JFR
137 Mutex* JfrStacktrace_lock = NULL;
138 Monitor* JfrMsg_lock = NULL;
139 Mutex* JfrBuffer_lock = NULL;
140 Mutex* JfrStream_lock = NULL;
141 Monitor* JfrThreadSampler_lock = NULL;
142 #endif
143
144 #ifndef SUPPORTS_NATIVE_CX8
145 Mutex* UnsafeJlong_lock = NULL;
146 #endif
147 Monitor* CodeHeapStateAnalytics_lock = NULL;
148
149 Mutex* MetaspaceExpand_lock = NULL;
150 Mutex* ClassLoaderDataGraph_lock = NULL;
151 Monitor* ThreadsSMRSupport_delete_lock = NULL;
152 Mutex* Decoder_shared_decoder_lock = NULL;
153 Mutex* DCmdFactory_lock = NULL;
154
155 #define MAX_NUM_MUTEX 128
156 static Monitor * _mutex_array[MAX_NUM_MUTEX];
157 static int _num_mutex;
158
159 #ifdef ASSERT
160 void assert_locked_or_safepoint(const Monitor * lock) {
161 // check if this thread owns the lock (common case)
162 if (IgnoreLockingAssertions) return;
163 assert(lock != NULL, "Need non-NULL lock");
164 if (lock->owned_by_self()) return;
165 if (SafepointSynchronize::is_at_safepoint()) return;
166 if (!Universe::is_fully_initialized()) return;
167 // see if invoker of VM operation owns it
168 VM_Operation* op = VMThread::vm_operation();
169 if (op != NULL && op->calling_thread() == lock->owner()) return;
170 fatal("must own lock %s", lock->name());
171 }
172
173 // a weaker assertion than the above
230 def(MarkStackFreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
231 def(MarkStackChunkList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
232
233 def(MonitoringSupport_lock , PaddedMutex , native , true, Monitor::_safepoint_check_never); // used for serviceability monitoring support
234 }
235 def(ParGCRareEvent_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_sometimes);
236 def(DerivedPointerTableGC_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
237 def(CGCPhaseManager_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_sometimes);
238 def(CodeCache_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
239 def(RawMonitor_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
240 def(OopMapCacheAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for oop_map_cache allocation.
241
242 def(MetaspaceExpand_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never);
243 def(ClassLoaderDataGraph_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always);
244
245 def(Patching_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); // used for safepointing and code patching.
246 def(Service_lock , PaddedMonitor, special, true, Monitor::_safepoint_check_never); // used for service thread operations
247 def(JmethodIdCreation_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for creating jmethodIDs.
248
249 def(SystemDictionary_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread
250 def(SharedDictionary_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread
251 def(Module_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_always);
252 def(InlineCacheBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always);
253 def(VMStatistic_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always);
254 def(ExpandHeap_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // Used during compilation by VM thread
255 def(JNIHandleBlockFreeList_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never); // handles are used by VM thread
256 def(SignatureHandlerLibrary_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always);
257 def(SymbolArena_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_never);
258 def(StringTable_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always);
259 def(ProfilePrint_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing
260 def(ExceptionCache_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing
261 def(OsrList_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
262 def(Debug1_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
263 #ifndef PRODUCT
264 def(FullGCALot_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // a lock to make FullGCALot MT safe
265 #endif
266 def(BeforeExit_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
267 def(PerfDataMemAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for allocating PerfData memory for performance data
268 def(PerfDataManager_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for synchronized access to PerfDataManager resources
269
270 // CMS_modUnionTable_lock leaf
305 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes);
306 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
307 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always);
308
309 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always);
310 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
311 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never);
312 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always);
313 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes);
314 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always);
315
316 if (WhiteBoxAPI) {
317 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
318 }
319
320 #if INCLUDE_JFR
321 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
322 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
323 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint'
324 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
325 def(JfrThreadSampler_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never);
326 #endif
327
328 #ifndef SUPPORTS_NATIVE_CX8
329 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never);
330 #endif
331
332 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
333
334 def(NMethodSweeper_stat_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes);
335 def(ThreadsSMRSupport_delete_lock, PaddedMonitor, special, false, Monitor::_safepoint_check_never);
336 def(Decoder_shared_decoder_lock , PaddedMutex , native, false, Monitor::_safepoint_check_never);
337 def(DCmdFactory_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
338 }
339
340 GCMutexLocker::GCMutexLocker(Monitor * mutex) {
341 if (SafepointSynchronize::is_at_safepoint()) {
342 _locked = false;
343 } else {
344 _mutex = mutex;
345 _locked = true;
346 _mutex->lock();
347 }
348 }
349
350 // Print all mutexes/monitors that are currently owned by a thread; called
351 // by fatal error handler.
352 void print_owned_locks_on_error(outputStream* st) {
353 st->print("VM Mutex/Monitor currently owned by a thread: ");
354 bool none = true;
355 for (int i = 0; i < _num_mutex; i++) {
356 // see if it has an owner
357 if (_mutex_array[i]->owner() != NULL) {
|