-
Bug
-
Resolution: Fixed
-
P4
-
21
-
b11
-
ppc
# Symptom
test/jdk/jdk/internal/vm/Continuation/Fuzz.java fails sporadically with
Exception in thread "main" java.lang.AssertionError: res: false shouldPin: false
at Fuzz.verifyPin(Fuzz.java:479)
at Fuzz.postYield(Fuzz.java:689)
// ...
# Analysis
(Line numbers refer to attachment yield_after_deopt_failure.log)
The recursive freeze of stack frames does not stop at the bottom frame (line 79) and then fails when trying to freeze the frame of the continuation enter intrinsic `Continuation.enterSpecial` (line 1) with `freeze_pinned_native`. This causes the test failure because freeze/yield should succeed.
The recursion is supposed to stop when the expression `FKind::frame_bottom(f) >= _bottom_address - 1` is true
(https://github.com/openjdk/jdk/blob/e4d1cff6597ac25d435fe16e0fc49d23f6e65df4/src/hotspot/share/runtime/continuationFreezeThaw.cpp#L834)
but there is dead space between `FreezeBase::_bottom_address` (line 23) and `ContinuationHelper::InterpretedFrame::frame_bottom` (line 35)
The dead space is left over from deoptimization of `Fuzz.com_mny(IIDJFLjava/lang/Object;IDJFLjava/lang/Object;IDJFLjava/lang/Object;IDJFLjava/lang/Object;)I`. It used to accomodate the stack args for the compiled frame.
test/jdk/jdk/internal/vm/Continuation/Fuzz.java fails sporadically with
Exception in thread "main" java.lang.AssertionError: res: false shouldPin: false
at Fuzz.verifyPin(Fuzz.java:479)
at Fuzz.postYield(Fuzz.java:689)
// ...
# Analysis
(Line numbers refer to attachment yield_after_deopt_failure.log)
The recursive freeze of stack frames does not stop at the bottom frame (line 79) and then fails when trying to freeze the frame of the continuation enter intrinsic `Continuation.enterSpecial` (line 1) with `freeze_pinned_native`. This causes the test failure because freeze/yield should succeed.
The recursion is supposed to stop when the expression `FKind::frame_bottom(f) >= _bottom_address - 1` is true
(https://github.com/openjdk/jdk/blob/e4d1cff6597ac25d435fe16e0fc49d23f6e65df4/src/hotspot/share/runtime/continuationFreezeThaw.cpp#L834)
but there is dead space between `FreezeBase::_bottom_address` (line 23) and `ContinuationHelper::InterpretedFrame::frame_bottom` (line 35)
The dead space is left over from deoptimization of `Fuzz.com_mny(IIDJFLjava/lang/Object;IDJFLjava/lang/Object;IDJFLjava/lang/Object;IDJFLjava/lang/Object;)I`. It used to accomodate the stack args for the compiled frame.