src/hotspot/share/runtime/mutex.cpp
changeset 57668 33b160ef735c
parent 57637 c38cca5ffb66
child 57699 4aea554692aa
equal deleted inserted replaced
57667:79036e5e744b 57668:33b160ef735c
   262 
   262 
   263 Monitor::~Monitor() {
   263 Monitor::~Monitor() {
   264   assert_owner(NULL);
   264   assert_owner(NULL);
   265 }
   265 }
   266 
   266 
   267 void Monitor::ClearMonitor(Monitor * m, const char *name) {
       
   268   m->_owner             = NULL;
       
   269   if (name == NULL) {
       
   270     strcpy(m->_name, "UNKNOWN");
       
   271   } else {
       
   272     strncpy(m->_name, name, MONITOR_NAME_LEN - 1);
       
   273     m->_name[MONITOR_NAME_LEN - 1] = '\0';
       
   274   }
       
   275 }
       
   276 
       
   277 Monitor::Monitor() {
       
   278   assert(os::mutex_init_done(), "Too early!");
       
   279   ClearMonitor(this);
       
   280 }
       
   281 
       
   282 
       
   283 // Only Threads_lock, Heap_lock and SR_lock may be safepoint_check_sometimes.
   267 // Only Threads_lock, Heap_lock and SR_lock may be safepoint_check_sometimes.
   284 bool is_sometimes_ok(const char* name) {
   268 bool is_sometimes_ok(const char* name) {
   285   return (strcmp(name, "Threads_lock") == 0 || strcmp(name, "Heap_lock") == 0 || strcmp(name, "SR_lock") == 0);
   269   return (strcmp(name, "Threads_lock") == 0 || strcmp(name, "Heap_lock") == 0 || strcmp(name, "SR_lock") == 0);
   286 }
   270 }
   287 
   271 
   288 Monitor::Monitor(int Rank, const char * name, bool allow_vm_block,
   272 Monitor::Monitor(int Rank, const char * name, bool allow_vm_block,
   289                  SafepointCheckRequired safepoint_check_required) {
   273                  SafepointCheckRequired safepoint_check_required) : _owner(NULL) {
   290   assert(os::mutex_init_done(), "Too early!");
   274   assert(os::mutex_init_done(), "Too early!");
   291   ClearMonitor(this, name);
   275   if (name == NULL) {
       
   276     strcpy(_name, "UNKNOWN");
       
   277   } else {
       
   278     strncpy(_name, name, MONITOR_NAME_LEN - 1);
       
   279     _name[MONITOR_NAME_LEN - 1] = '\0';
       
   280   }
   292 #ifdef ASSERT
   281 #ifdef ASSERT
   293   _allow_vm_block  = allow_vm_block;
   282   _allow_vm_block  = allow_vm_block;
   294   _rank            = Rank;
   283   _rank            = Rank;
   295   NOT_PRODUCT(_safepoint_check_required = safepoint_check_required;)
   284   _safepoint_check_required = safepoint_check_required;
   296 
   285 
   297   assert(_safepoint_check_required != Monitor::_safepoint_check_sometimes || is_sometimes_ok(name),
   286   assert(_safepoint_check_required != Monitor::_safepoint_check_sometimes || is_sometimes_ok(name),
   298          "Lock has _safepoint_check_sometimes %s", name);
   287          "Lock has _safepoint_check_sometimes %s", name);
   299 #endif
   288 #endif
   300 }
   289 }
   301 
   290 
   302 Mutex::Mutex(int Rank, const char * name, bool allow_vm_block,
   291 Mutex::Mutex(int Rank, const char * name, bool allow_vm_block,
   303              SafepointCheckRequired safepoint_check_required) {
   292              SafepointCheckRequired safepoint_check_required) :
   304   ClearMonitor((Monitor *) this, name);
   293   Monitor(Rank, name, allow_vm_block, safepoint_check_required) {}
   305 #ifdef ASSERT
       
   306   _allow_vm_block   = allow_vm_block;
       
   307   _rank             = Rank;
       
   308   NOT_PRODUCT(_safepoint_check_required = safepoint_check_required;)
       
   309 
       
   310   assert(_safepoint_check_required != Monitor::_safepoint_check_sometimes || is_sometimes_ok(name),
       
   311          "Lock has _safepoint_check_sometimes %s", name);
       
   312 #endif
       
   313 }
       
   314 
   294 
   315 bool Monitor::owned_by_self() const {
   295 bool Monitor::owned_by_self() const {
   316   return _owner == Thread::current();
   296   return _owner == Thread::current();
   317 }
   297 }
   318 
   298