317 def(JfrThreadSampler_lock , PaddedMonitor, leaf, true, _safepoint_check_never);
318 #endif
319
320 #ifndef SUPPORTS_NATIVE_CX8
321 def(UnsafeJlong_lock , PaddedMutex , special, false, _safepoint_check_never);
322 #endif
323
324 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, _safepoint_check_never);
325 def(NMethodSweeperStats_lock , PaddedMutex , special, true, _safepoint_check_never);
326 def(ThreadsSMRDelete_lock , PaddedMonitor, special, true, _safepoint_check_never);
327 def(ThreadIdTableCreate_lock , PaddedMutex , leaf, false, _safepoint_check_always);
328 def(SharedDecoder_lock , PaddedMutex , native, false, _safepoint_check_never);
329 def(DCmdFactory_lock , PaddedMutex , leaf, true, _safepoint_check_never);
330 #if INCLUDE_NMT
331 def(NMTQuery_lock , PaddedMutex , max_nonleaf, false, _safepoint_check_always);
332 #endif
333 #if INCLUDE_CDS
334 #if INCLUDE_JVMTI
335 def(CDSClassFileStream_lock , PaddedMutex , max_nonleaf, false, _safepoint_check_always);
336 #endif
337
338 #if INCLUDE_JVMCI
339 def(JVMCI_lock , PaddedMonitor, nonleaf+2, true, _safepoint_check_always);
340 #endif
341 def(DumpTimeTable_lock , PaddedMutex , leaf, true, _safepoint_check_never);
342 #endif // INCLUDE_CDS
343 }
344
345 GCMutexLocker::GCMutexLocker(Mutex* mutex) {
346 if (SafepointSynchronize::is_at_safepoint()) {
347 _locked = false;
348 } else {
349 _mutex = mutex;
350 _locked = true;
351 _mutex->lock();
352 }
353 }
354
355 // Print all mutexes/monitors that are currently owned by a thread; called
356 // by fatal error handler.
357 void print_owned_locks_on_error(outputStream* st) {
358 st->print("VM Mutex/Monitor currently owned by a thread: ");
359 bool none = true;
360 for (int i = 0; i < _num_mutex; i++) {
361 // see if it has an owner
362 if (_mutex_array[i]->owner() != NULL) {
|
317 def(JfrThreadSampler_lock , PaddedMonitor, leaf, true, _safepoint_check_never);
318 #endif
319
320 #ifndef SUPPORTS_NATIVE_CX8
321 def(UnsafeJlong_lock , PaddedMutex , special, false, _safepoint_check_never);
322 #endif
323
324 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, _safepoint_check_never);
325 def(NMethodSweeperStats_lock , PaddedMutex , special, true, _safepoint_check_never);
326 def(ThreadsSMRDelete_lock , PaddedMonitor, special, true, _safepoint_check_never);
327 def(ThreadIdTableCreate_lock , PaddedMutex , leaf, false, _safepoint_check_always);
328 def(SharedDecoder_lock , PaddedMutex , native, false, _safepoint_check_never);
329 def(DCmdFactory_lock , PaddedMutex , leaf, true, _safepoint_check_never);
330 #if INCLUDE_NMT
331 def(NMTQuery_lock , PaddedMutex , max_nonleaf, false, _safepoint_check_always);
332 #endif
333 #if INCLUDE_CDS
334 #if INCLUDE_JVMTI
335 def(CDSClassFileStream_lock , PaddedMutex , max_nonleaf, false, _safepoint_check_always);
336 #endif
337 def(DumpTimeTable_lock , PaddedMutex , leaf, true, _safepoint_check_never);
338 #endif // INCLUDE_CDS
339
340 #if INCLUDE_JVMCI
341 def(JVMCI_lock , PaddedMonitor, nonleaf+2, true, _safepoint_check_always);
342 #endif
343 }
344
345 GCMutexLocker::GCMutexLocker(Mutex* mutex) {
346 if (SafepointSynchronize::is_at_safepoint()) {
347 _locked = false;
348 } else {
349 _mutex = mutex;
350 _locked = true;
351 _mutex->lock();
352 }
353 }
354
355 // Print all mutexes/monitors that are currently owned by a thread; called
356 // by fatal error handler.
357 void print_owned_locks_on_error(outputStream* st) {
358 st->print("VM Mutex/Monitor currently owned by a thread: ");
359 bool none = true;
360 for (int i = 0; i < _num_mutex; i++) {
361 // see if it has an owner
362 if (_mutex_array[i]->owner() != NULL) {
|