diff -r 8d52b4c6f9d8 -r 05aaccf7d558 src/hotspot/share/runtime/thread.cpp --- a/src/hotspot/share/runtime/thread.cpp Mon Apr 29 14:34:10 2019 -0400 +++ b/src/hotspot/share/runtime/thread.cpp Mon Apr 29 16:01:52 2019 -0400 @@ -794,14 +794,12 @@ // safepoint requests from the VMThread { - MutexLocker ml(SR_lock()); + Thread* t = Thread::current(); + MonitorLocker ml(SR_lock(), + t->is_Java_thread() ? Mutex::_safepoint_check_flag : Mutex::_no_safepoint_check_flag); // wait with safepoint check (if we're a JavaThread - the WatcherThread // can also call this) and increase delay with each retry - if (Thread::current()->is_Java_thread()) { - SR_lock()->wait(i * delay); - } else { - SR_lock()->wait_without_safepoint_check(i * delay); - } + ml.wait(i * delay); is_suspended = is_ext_suspend_completed(true /* called_by_wait */, delay, bits); @@ -1405,7 +1403,7 @@ int WatcherThread::sleep() const { // The WatcherThread does not participate in the safepoint protocol // for the PeriodicTask_lock because it is not a JavaThread. - MutexLocker ml(PeriodicTask_lock, Mutex::_no_safepoint_check_flag); + MonitorLocker ml(PeriodicTask_lock, Mutex::_no_safepoint_check_flag); if (_should_terminate) { // check for termination before we do any housekeeping or wait @@ -1425,7 +1423,7 @@ jlong time_before_loop = os::javaTimeNanos(); while (true) { - bool timedout = PeriodicTask_lock->wait_without_safepoint_check(remaining); + bool timedout = ml.wait(remaining); jlong now = os::javaTimeNanos(); if (remaining == 0) { @@ -1548,12 +1546,12 @@ } } - MutexLocker mu(Terminator_lock); + MonitorLocker mu(Terminator_lock); while (watcher_thread() != NULL) { // This wait should make safepoint checks, wait without a timeout, // and wait as a suspend-equivalent condition. - Terminator_lock->wait(0, Mutex::_as_suspend_equivalent_flag); + mu.wait(0, Mutex::_as_suspend_equivalent_flag); } } @@ -2424,7 +2422,7 @@ (is_Java_thread() && !((JavaThread*)this)->has_last_Java_frame()), "must have walkable stack"); - MutexLocker ml(SR_lock(), Mutex::_no_safepoint_check_flag); + MonitorLocker ml(SR_lock(), Mutex::_no_safepoint_check_flag); assert(!this->is_ext_suspended(), "a thread trying to self-suspend should not already be suspended"); @@ -2452,7 +2450,7 @@ // _ext_suspended flag is cleared by java_resume() while (is_ext_suspended()) { - this->SR_lock()->wait_without_safepoint_check(); + ml.wait(); } } return ret; @@ -3844,10 +3842,10 @@ // Wait for the VM thread to become ready, and VMThread::run to initialize // Monitors can have spurious returns, must always check another state flag { - MutexLocker ml(Notify_lock); + MonitorLocker ml(Notify_lock); os::start_thread(vmthread); while (vmthread->active_handles() == NULL) { - Notify_lock->wait(); + ml.wait(); } } } @@ -4325,11 +4323,11 @@ _vm_complete = false; #endif // Wait until we are the last non-daemon thread to execute - { MutexLocker nu(Threads_lock); + { MonitorLocker nu(Threads_lock); while (Threads::number_of_non_daemon_threads() > 1) // This wait should make safepoint checks, wait without a timeout, // and wait as a suspend-equivalent condition. - Threads_lock->wait(0, Mutex::_as_suspend_equivalent_flag); + nu.wait(0, Mutex::_as_suspend_equivalent_flag); } EventShutdown e; @@ -4465,7 +4463,7 @@ // Extra scope needed for Thread_lock, so we can check // that we do not remove thread without safepoint code notice - { MutexLocker ml(Threads_lock); + { MonitorLocker ml(Threads_lock); assert(ThreadsSMRSupport::get_java_thread_list()->includes(p), "p must be present"); @@ -4493,7 +4491,7 @@ // Only one thread left, do a notify on the Threads_lock so a thread waiting // on destroy_vm will wake up. if (number_of_non_daemon_threads() == 1) { - Threads_lock->notify_all(); + ml.notify_all(); } } ThreadService::remove_thread(p, is_daemon);