comparison src/share/vm/runtime/mutex.cpp @ 55:2a8eb116ebbe

6610420: Debug VM crashes during monitor lock rank checking Summary: Make SerializePage lock as raw lock and add name for mutex locks Reviewed-by: never, dice, dholmes
author xlu
date Tue, 05 Feb 2008 23:21:57 -0800
parents a61af66fc99e
children d1605aabd0a1
comparison
equal deleted inserted replaced
54:d4a0f561287a 55:2a8eb116ebbe
1117 1117
1118 Monitor::~Monitor() { 1118 Monitor::~Monitor() {
1119 assert ((UNS(_owner)|UNS(_LockWord.FullWord)|UNS(_EntryList)|UNS(_WaitSet)|UNS(_OnDeck)) == 0, "") ; 1119 assert ((UNS(_owner)|UNS(_LockWord.FullWord)|UNS(_EntryList)|UNS(_WaitSet)|UNS(_OnDeck)) == 0, "") ;
1120 } 1120 }
1121 1121
1122 void Monitor::ClearMonitor (Monitor * m) { 1122 void Monitor::ClearMonitor (Monitor * m, const char *name) {
1123 m->_owner = NULL ; 1123 m->_owner = NULL ;
1124 m->_snuck = false ; 1124 m->_snuck = false ;
1125 m->_name = "UNKNOWN" ; 1125 if (name == NULL) {
1126 strcpy(m->_name, "UNKNOWN") ;
1127 } else {
1128 strncpy(m->_name, name, MONITOR_NAME_LEN - 1);
1129 m->_name[MONITOR_NAME_LEN - 1] = '\0';
1130 }
1126 m->_LockWord.FullWord = 0 ; 1131 m->_LockWord.FullWord = 0 ;
1127 m->_EntryList = NULL ; 1132 m->_EntryList = NULL ;
1128 m->_OnDeck = NULL ; 1133 m->_OnDeck = NULL ;
1129 m->_WaitSet = NULL ; 1134 m->_WaitSet = NULL ;
1130 m->_WaitLock[0] = 0 ; 1135 m->_WaitLock[0] = 0 ;
1131 } 1136 }
1132 1137
1133 Monitor::Monitor() { ClearMonitor(this); } 1138 Monitor::Monitor() { ClearMonitor(this); }
1134 1139
1135 Monitor::Monitor (int Rank, const char * name, bool allow_vm_block) { 1140 Monitor::Monitor (int Rank, const char * name, bool allow_vm_block) {
1136 ClearMonitor (this) ; 1141 ClearMonitor (this, name) ;
1137 #ifdef ASSERT 1142 #ifdef ASSERT
1138 _allow_vm_block = allow_vm_block; 1143 _allow_vm_block = allow_vm_block;
1139 _rank = Rank ; 1144 _rank = Rank ;
1140 #endif 1145 #endif
1141 } 1146 }
1143 Mutex::~Mutex() { 1148 Mutex::~Mutex() {
1144 assert ((UNS(_owner)|UNS(_LockWord.FullWord)|UNS(_EntryList)|UNS(_WaitSet)|UNS(_OnDeck)) == 0, "") ; 1149 assert ((UNS(_owner)|UNS(_LockWord.FullWord)|UNS(_EntryList)|UNS(_WaitSet)|UNS(_OnDeck)) == 0, "") ;
1145 } 1150 }
1146 1151
1147 Mutex::Mutex (int Rank, const char * name, bool allow_vm_block) { 1152 Mutex::Mutex (int Rank, const char * name, bool allow_vm_block) {
1148 ClearMonitor ((Monitor *) this) ; 1153 ClearMonitor ((Monitor *) this, name) ;
1149 #ifdef ASSERT 1154 #ifdef ASSERT
1150 _allow_vm_block = allow_vm_block; 1155 _allow_vm_block = allow_vm_block;
1151 _rank = Rank ; 1156 _rank = Rank ;
1152 #endif 1157 #endif
1153 } 1158 }