mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-19 10:34:38 +02:00
8275761: Backout: JDK-8274794 Print all owned locks in hs_err file
Reviewed-by: mikael
This commit is contained in:
parent
c978ca87de
commit
fab3d6c612
8 changed files with 110 additions and 242 deletions
|
@ -157,6 +157,11 @@ Mutex* Bootclasspath_lock = NULL;
|
|||
Monitor* JVMCI_lock = NULL;
|
||||
#endif
|
||||
|
||||
|
||||
#define MAX_NUM_MUTEX 128
|
||||
static Mutex* _mutex_array[MAX_NUM_MUTEX];
|
||||
static int _num_mutex;
|
||||
|
||||
#ifdef ASSERT
|
||||
void assert_locked_or_safepoint(const Mutex* lock) {
|
||||
// check if this thread owns the lock (common case)
|
||||
|
@ -189,18 +194,26 @@ void assert_locked_or_safepoint_or_handshake(const Mutex* lock, const JavaThread
|
|||
}
|
||||
#endif
|
||||
|
||||
static void add_mutex(Mutex* var) {
|
||||
assert(_num_mutex < MAX_NUM_MUTEX, "increase MAX_NUM_MUTEX");
|
||||
_mutex_array[_num_mutex++] = var;
|
||||
}
|
||||
|
||||
#define def(var, type, pri, vm_block) { \
|
||||
var = new type(Mutex::pri, #var, vm_block); \
|
||||
add_mutex(var); \
|
||||
}
|
||||
|
||||
// Specify relative ranked lock
|
||||
#ifdef ASSERT
|
||||
#define defl(var, type, held_lock, vm_block) { \
|
||||
var = new type(held_lock->rank()-1, #var, vm_block); \
|
||||
add_mutex(var); \
|
||||
}
|
||||
#else
|
||||
#define defl(var, type, held_lock, vm_block) { \
|
||||
var = new type(Mutex::safepoint, #var, vm_block); \
|
||||
add_mutex(var); \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -364,3 +377,23 @@ GCMutexLocker::GCMutexLocker(Mutex* mutex) {
|
|||
_mutex->lock();
|
||||
}
|
||||
}
|
||||
|
||||
// Print all mutexes/monitors that are currently owned by a thread; called
|
||||
// by fatal error handler.
|
||||
void print_owned_locks_on_error(outputStream* st) {
|
||||
st->print("VM Mutex/Monitor currently owned by a thread: ");
|
||||
bool none = true;
|
||||
for (int i = 0; i < _num_mutex; i++) {
|
||||
// see if it has an owner
|
||||
if (_mutex_array[i]->owner() != NULL) {
|
||||
if (none) {
|
||||
// print format used by Mutex::print_on_error()
|
||||
st->print_cr(" ([mutex/lock_event])");
|
||||
none = false;
|
||||
}
|
||||
_mutex_array[i]->print_on_error(st);
|
||||
st->cr();
|
||||
}
|
||||
}
|
||||
if (none) st->print_cr("None");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue