< prev index next >

src/hotspot/share/runtime/mutexLocker.cpp

Print this page




  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) {
< prev index next >