JDK-6681646 : Relocking of a scalar replaced object during deoptimization is broken.
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs12
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: solaris_10
  • CPU: x86
  • Submitted: 2008-03-28
  • Updated: 2012-02-01
  • Resolved: 2011-03-08
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 6 Other
6u14Fixed hs12Fixed
Description
PIT testing of 6u5p got failures in nsk tests when runnning with EA and BiasedLocking.
Tests passed with EA or BiasedLocking switched off.

The test failed when trying exit the monitor after deoptimization
of the compiled method with eliminated lock of scalar replaced 
object.

When scalarized object is reallocated the mark word is set
to klass->prototype_header() by default. Which can have biased pattern.

But the lock should not be biased in order to safely move 
the displaced mark word from the compiled frame 
to the vframeArray and back to the interpreted frame.

Affected tests:
#  Internal Error (synchronizer.cpp:1803), pid=XXX, tid=XXX
#  Error: guarantee(mid->header()->is_neutral(),"invariant")

nsk/stress/jck12a/jck12a011
nsk/stress/jck12a/jck12a015
nsk/stress/jck12a/jck12a016
nsk/stress/jck12a/jck12a017
nsk/stress/jck60/jck60011
nsk/stress/jck60/jck60013
nsk/stress/jck60/jck60016
nsk/stress/jck60/jck60017
nsk/stress/jck60/jck60018
nsk/stress/jck60/jck60019
nsk/stress/jck60/jck60021
I see the following tests fail with the same assertion:
	nsk/monitoring/stress/thread/cmon002
	nsk/monitoring/stress/thread/cmon003

Comments
EVALUATION The test failed when trying exit the monitor after deoptimization of the compiled method with eliminated lock. New allocated objects may have the mark set to anonymously biased. Also the deoptimized method may called methods with synchronization where the thread-local object is bias locked to the current thread.
02-04-2008