8205472: Deadlock in Kitchensink when trying to print compile queues causing timeout
Summary: Do not acquire the MethodCompileQueue_lock in CompileBroker::print_compile_queues().
Reviewed-by: kvn, kbarrett, dholmes
--- a/src/hotspot/share/compiler/compileBroker.cpp Tue Jul 10 15:09:34 2018 +0200
+++ b/src/hotspot/share/compiler/compileBroker.cpp Tue Jul 10 15:33:55 2018 +0200
@@ -530,7 +530,6 @@
void CompileBroker::print_compile_queues(outputStream* st) {
st->print_cr("Current compiles: ");
- MutexLocker locker(MethodCompileQueue_lock);
char buf[2000];
int buflen = sizeof(buf);
@@ -546,7 +545,7 @@
}
void CompileQueue::print(outputStream* st) {
- assert(MethodCompileQueue_lock->owned_by_self(), "must own lock");
+ assert_locked_or_safepoint(MethodCompileQueue_lock);
st->print_cr("%s:", name());
CompileTask* task = _first;
if (task == NULL) {
--- a/src/hotspot/share/runtime/thread.cpp Tue Jul 10 15:09:34 2018 +0200
+++ b/src/hotspot/share/runtime/thread.cpp Tue Jul 10 15:33:55 2018 +0200
@@ -963,7 +963,7 @@
// The flag: potential_vm_operation notifies if this particular safepoint state could potentially
// invoke the vm-thread (e.g., an oop allocation). In that case, we also have to make sure that
-// no threads which allow_vm_block's are held
+// no locks which allow_vm_block's are held
void Thread::check_for_valid_safepoint_state(bool potential_vm_operation) {
// Check if current thread is allowed to block at a safepoint
if (!(_allow_safepoint_count == 0)) {