JDK-8079359 : disable JDK-8061553 optimization while JDK-8077392 is resolved
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 9
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2015-05-05
  • Updated: 2015-07-16
  • Resolved: 2015-05-06
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9 b64Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Description
The following bug fix:

    JDK-8061553 Contended Locking fast enter bucket

is causing intermittent hangs in JDK9-dev testing. That hang is
being tracked by the following bug:

    JDK-8077392 Stream fork/join tasks occasionally fail to complete
Comments
I ran the above work around with the test from JDK-8077392 in two parallel runs. Both runs passed 501 iterations without a hang. In my test setup for 8077392 I've seen a hang in as few as 8 iterations and as many as a couple hundred. With 501 iterations X 2, I'm very confident that this work around will solve the hang.
06-05-2015

Here is the proposed change: $ hg diff diff -r a0df4738688e src/share/vm/runtime/sharedRuntime.cpp --- a/src/share/vm/runtime/sharedRuntime.cpp Sat May 02 00:16:29 2015 -0700 +++ b/src/share/vm/runtime/sharedRuntime.cpp Tue May 05 09:57:09 2015 -0700 @@ -1793,7 +1793,9 @@ JRT_END // Handles the uncommon case in locking, i.e., contention or an inflated lock. JRT_BLOCK_ENTRY(void, SharedRuntime::complete_monitor_locking_C(oopDesc* _obj, BasicLock* lock, JavaThread* thread)) - if (!SafepointSynchronize::is_synchronizing()) { + // Disable ObjectSynchronizer::quick_enter() in default config + // until JDK-8077392 is resolved. + if ((SyncFlags & 256) != 0 && !SafepointSynchronize::is_synchronizing()) { // Only try quick_enter() if we're not trying to reach a safepoint // so that the calling thread reaches the safepoint more quickly. if (ObjectSynchronizer::quick_enter(_obj, thread, lock)) return;
05-05-2015