OpenJDK / valhalla / valhalla
changeset 53394:bf2f2560dd53
8214315: G1: fatal error: acquiring lock SATB_Q_FL_lock/1 out of order with lock tty_lock/0
Summary: Add new 'tty' lock rank.
Reviewed-by: eosterlund, tschatzl
author | kbarrett |
---|---|
date | Sat, 08 Dec 2018 18:52:57 -0500 |
parents | f94276ccc9fc |
children | 4fa75d8ad418 |
files | src/hotspot/share/runtime/mutex.cpp src/hotspot/share/runtime/mutex.hpp src/hotspot/share/runtime/mutexLocker.cpp |
diffstat | 3 files changed, 9 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/hotspot/share/runtime/mutex.cpp Sat Dec 08 17:41:17 2018 +0100 +++ b/src/hotspot/share/runtime/mutex.cpp Sat Dec 08 18:52:57 2018 -0500 @@ -1076,9 +1076,9 @@ Monitor * least = get_least_ranked_lock_besides_this(Self->owned_locks()); assert(least != this, "Specification of get_least_... call above"); if (least != NULL && least->rank() <= special) { - tty->print("Attempting to wait on monitor %s/%d while holding" - " lock %s/%d -- possible deadlock", - name(), rank(), least->name(), least->rank()); + ::tty->print("Attempting to wait on monitor %s/%d while holding" + " lock %s/%d -- possible deadlock", + name(), rank(), least->name(), least->rank()); assert(false, "Shouldn't block(wait) while holding a lock of rank special"); } #endif // ASSERT
--- a/src/hotspot/share/runtime/mutex.hpp Sat Dec 08 17:41:17 2018 +0100 +++ b/src/hotspot/share/runtime/mutex.hpp Sat Dec 08 18:52:57 2018 -0500 @@ -87,6 +87,8 @@ // The rank 'access' is similar to 'special' and has the same restrictions on usage. // It is reserved for locks that may be required in order to perform memory accesses // that require special barriers, e.g. SATB GC barriers, that in turn uses locks. + // The rank 'tty' is also similar to 'special' and has the same restrictions. + // It is reserved for the tty_lock. // Since memory accesses should be able to be performed pretty much anywhere // in the code, that requires locks required for performing accesses being // inherently a bit more special than even locks of the 'special' rank. @@ -104,7 +106,8 @@ enum lock_types { event, access = event + 1, - special = access + 2, + tty = access + 2, + special = tty + 1, suspend_resume = special + 1, vmweak = suspend_resume + 2, leaf = vmweak + 2, @@ -236,7 +239,7 @@ #ifndef PRODUCT void print_on(outputStream* st) const; - void print() const { print_on(tty); } + void print() const { print_on(::tty); } DEBUG_ONLY(int rank() const { return _rank; }) bool allow_vm_block() { return _allow_vm_block; }
--- a/src/hotspot/share/runtime/mutexLocker.cpp Sat Dec 08 17:41:17 2018 +0100 +++ b/src/hotspot/share/runtime/mutexLocker.cpp Sat Dec 08 18:52:57 2018 -0500 @@ -199,7 +199,7 @@ // Using Padded subclasses to prevent false sharing of these global monitors and mutexes. void mutex_init() { - def(tty_lock , PaddedMutex , event, true, Monitor::_safepoint_check_never); // allow to lock in VM + def(tty_lock , PaddedMutex , tty, true, Monitor::_safepoint_check_never); // allow to lock in VM def(CGC_lock , PaddedMonitor, special, true, Monitor::_safepoint_check_never); // coordinate between fore- and background GC def(STS_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never);